## Loading required package: knitr

1 Prelim

1.1 Libraries

source("PCAWG-functions.R")
## Loading required package: GenomeInfoDb
## Loading required package: BiocGenerics
## Loading required package: parallel
## 
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:parallel':
## 
##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport, clusterMap, parApply,
##     parCapply, parLapply, parLapplyLB, parRapply, parSapply, parSapplyLB
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, append, as.data.frame, cbind, colnames, do.call, duplicated, eval, evalq, Filter, Find,
##     get, grep, grepl, intersect, is.unsorted, lapply, lengths, Map, mapply, match, mget, order, paste,
##     pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort, table,
##     tapply, union, unique, unsplit, which, which.max, which.min
## Loading required package: S4Vectors
## Loading required package: stats4
## 
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:base':
## 
##     colMeans, colSums, expand.grid, rowMeans, rowSums
## Loading required package: IRanges
## Loading required package: GenomicRanges
## Loading required package: Biostrings
## Loading required package: XVector
## Loading required package: SummarizedExperiment
## Loading required package: Biobase
## Welcome to Bioconductor
## 
##     Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see
##     'citation("Biobase")', and for packages 'citation("pkgname")'.
## 
## Attaching package: 'VariantAnnotation'
## The following object is masked from 'package:base':
## 
##     tabulate
## Warning: NAs introduced by coercion
## Loading required package: VGAM
## Loading required package: splines
## Warning: NAs introduced by coercion

2 Load data

2.1 Whitelist

2.1.1 SNV and MNV

p <- "../final/annotated_014/snv_mnv"
d <- dir(p, pattern="*.vcf.RData", full.names=TRUE)
finalSnv <- unlist(mclapply(split(d, seq_along(d) %/% 100), lapply, function(f) { # read in batches of 100
            e <- new.env()
            load(f, envir=e)
            e$vcf
        }, mc.preschedule=FALSE), recursive=FALSE)
names(finalSnv) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))

2.1.2 Copy number profiles

p <- "../final/annotated_014/cn"
finalBB <- list()
for( f in dir(p, pattern="*.bb_granges.RData", full.names=TRUE)){
    load(f)
    colnames(mcols(bb)) <- sub("star.1","time.star",colnames(mcols(bb)) ) # Fix naming problem
    finalBB[[f]] <- bb
}
names(finalBB) <- sub(".conse.+","",dir(p, pattern="*.bb_granges.RData", full.names=FALSE))

2.1.3 Indel

p <- "../final/annotated_014/indel"
d <- dir(p, pattern="*.vcf.RData", full.names=TRUE)
finalIndel <- unlist(mclapply(split(d, seq_along(d) %/% 100), lapply, function(f) { # read in batches of 100
                    e <- new.env()
                    load(f, envir=e)
                    e$vcfIndel
                }, mc.preschedule=FALSE), recursive=FALSE)
names(finalIndel) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))

2.1.4 Clusters and purity

finalClusters <- list()
finalPurity <- numeric()
p <- "../final/annotated_014/clusters"
for( f in dir(p, pattern="*.RData", full.names=TRUE)){
    load(f)
    finalClusters[[f]] <- clusters
    finalPurity[f] <- purity
}
names(finalClusters) <- names(finalPurity) <- sub(".conse.+","",dir(p, pattern="*.RData", full.names=FALSE))

2.2 Update drivers

2.2.1 Update finalDrivers

finalDriversAnnotated <- finalDrivers
d <- info(finalSnv[[3]])[seq_along(finalDriversAnnotated),19:32]
#d[,] <- NA
mcols(finalDriversAnnotated)[colnames(d)] <- d
for(i in seq_along(finalDriversAnnotated)){
    if(finalDriversAnnotated$mut_type[i] %in% c("snv","mnv")){
        v <- finalSnv[[as.character(finalDriversAnnotated$sample[i])]]
    }else{
        v <- finalIndel[[as.character(finalDriversAnnotated$sample[i])]]
    }
    j <- findOverlaps(finalDriversAnnotated[i], v, select='first')
    if(!is.na(j)){
        mcols(finalDriversAnnotated)[i,colnames(d)] <- info(v)[j, colnames(d)]
        refDepth(finalDriversAnnotated)[i] <- info(v)[j,"t_ref_count"]
        altDepth(finalDriversAnnotated)[i] <- info(v)[j,"t_alt_count"]
    }
    else
        mcols(finalDriversAnnotated)[i,colnames(d)] <- NA
}

2.3 Graylisted data

2.3.1 SNV and MNV

p <- "../final/annotated_014/graylist/snv_mnv"
finalSnvGray <- mclapply(dir(p, pattern="*.vcf.RData", full.names=TRUE), function(f) {
            e <- new.env()
            load(f, envir=e)
            e$vcf
        })
names(finalSnvGray) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))
finalSnv[names(finalSnvGray)] <- finalSnvGray

2.3.2 Copy number profiles

p <- "../final/annotated_014/graylist/cn"
finalBBGray <- list()
for( f in dir(p, pattern="*.bb_granges.RData", full.names=TRUE)){
    load(f)
    colnames(mcols(bb)) <- sub("star.1","time.star",colnames(mcols(bb)) ) # Fix naming problem
    finalBBGray[[f]] <- bb
}
names(finalBBGray) <- sub(".conse.+","",dir(p, pattern="*.bb_granges.RData", full.names=FALSE))
finalBB[names(finalBBGray)] <- finalBBGray

2.3.3 Indel

p <- "../final/annotated_014/graylist/indel"
finalIndelGray <- mclapply(dir(p, pattern="*.vcf.RData", full.names=TRUE), function(f) {
            e <- new.env()
            load(f, envir=e)
            e$vcfIndel
        })
names(finalIndelGray) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))
finalIndel[names(finalIndelGray)] <- finalIndelGray

2.3.4 Clusters and purity

finalClustersGray <- list()
finalPurityGray <- numeric()
p <- "../final/annotated_014/graylist/clusters"
for( f in dir(p, pattern="*.RData", full.names=TRUE)){
    load(f)
    finalClustersGray[[f]] <- clusters
    finalPurityGray[f] <- purity
}
names(finalClustersGray) <- names(finalPurityGray) <- sub(".conse.+","",dir(p, pattern="*.RData", full.names=FALSE))
finalClusters[names(finalClustersGray)] <- finalClustersGray
finalPurity <- c(finalPurity, finalPurityGray)

whiteList <- seq_along(finalSnv) %in% 1:2703
grayList <- !whiteList

2.4 Structural variants

finalSv <- mclapply(dir("../final/pcawg_consensus_1.6.161116.somatic_svs", pattern='*.vcf.gz$', full.names=TRUE), function(x) {
            t <- try(readVcf(x))
            return(t)
        })
names(finalSv) <- sub("../final/pcawg_consensus_1.6.161116.somatic_svs/","", sub(".pcawg_consensus_1.6.161116.somatic.sv.vcf.gz","",dir("../final/pcawg_consensus_1.6.161116.somatic_svs", pattern='*.vcf.gz$', full.names=TRUE)))
finalSv <- finalSv[names(finalSnv)]

3 QC

q1 <- sapply(finalSnv, function(vcf) mean(abs(0.5- info(vcf)$pMutCNTail) > 0.495 , na.rm=TRUE))
q5 <- sapply(finalSnv, function(vcf) mean(abs(0.5- info(vcf)$pMutCNTail) > 0.475 , na.rm=TRUE))
par(mfrow=c(1,1))
boxplot(1-q5 ~ donor2type[sample2donor[names(finalSnv)]], las=2, ylab="Fraction of data inside theoretical 95% CI")
abline(h=0.95, lty=3)

#pdf("QQplots.pdf", 4,4, pointsize=8)
par(mfrow=c(5,5))
for(i in seq_along(finalSnv)[1:25]){
    n <- nrow(finalSnv[[i]])
    qqnorm(qnorm(info(finalSnv[[i]])$pMutCNTail[sample(1:n, min(1e4,n))]), main=paste(substr(names(finalSnv)[i],1,8), "Q5 =", signif(q5[i],2), ", Q1 =", signif(q1[i],2)), xlim=c(-5,5), ylim=c(-5,5), pch=16)
    abline(0,1, col='red')
}

#dev.off()

4 Driver genotypes

4.1 MAP genotypes

finalGenotypesSnv <- simplify2array(mclapply(finalSnv[whiteList], getGenotype, useNA="always"))
finalGenotypesIndel <- simplify2array(mclapply(finalIndel[whiteList], getGenotype, useNA="always"))
finalGenotypes <- aperm(abind::abind(subs=finalGenotypesSnv,indels=finalGenotypesIndel, along=5), c(1,5,2,3,4))
rm(finalGenotypesSnv,finalGenotypesIndel)

4.2 Probabilistic genotypes

finalGenotypesSnvP <- simplify2array(mclapply(finalSnv[whiteList], probGenotype))
finalGenotypesIndelP <- simplify2array(mclapply(finalIndel[whiteList], probGenotype))
finalGenotypesP <- aperm(abind::abind(subs=finalGenotypesSnvP,indels=finalGenotypesIndelP, along=4), c(1,4,2,3))
rm(finalGenotypesSnvP,finalGenotypesIndelP)

4.3 Probabilistic genotypes - tail prob (QC)

finalGenotypesSnvQ <- simplify2array(mclapply(finalSnv[whiteList], probGenotypeTail))
finalGenotypesIndelQ <- simplify2array(mclapply(finalIndel[whiteList], probGenotypeTail))
finalGenotypesQ <- aperm(abind::abind(subs=finalGenotypesSnvQ,indels=finalGenotypesIndelQ, along=3), c(1,3,2))
rm(finalGenotypesSnvQ,finalGenotypesIndelQ)

5 Save output

save.image(file=dumpfile, compress=FALSE)
save(finalGenotypes, finalGenotypesP, finalGenotypesQ, file=paste0(Sys.Date(),"-FinalGenotypes.RData"))

6 Timing of point mutations

6.1 Duplicated samples

w <- names(finalSnv)
n <- names(which(table(sample2donor[w]) > 1)) # donors
s <- w[w %in% names(sample2donor[sample2donor %in% n])] # multisamples
d <- setdiff(sample2donor[w], sample2donor[levels(finalDrivers$sample)]) # donors w/o driver
u <- sample2donor[s[sample2donor[s] %in% intersect(d,n)]]
selectedSamples <- !w %in% setdiff(s[!s %in% finalDrivers$sample ], names(u)[!duplicated(u)])
uniqueSamples <- !duplicated(sample2donor[names(finalSnv)])

6.2 Overall distribution

6.2.1 Subs or indels

f <- function(x) unlist(sapply(seq_along(x), function(i) rep(i, x[i])))
d <- t(asum(finalGenotypesP[,"subs",,], 1))
o <- order(droplevels(donor2type[sample2donor[rownames(d)]]), -d[,1]/rowSums(d))
I <- t(apply(d/rowSums(d), 1, function(x) f(mg14:::roundProp(x * 100,p=100))))
d <- t(asum(finalGenotypesP[,"indels",,], 1))
J <- t(apply(d/rowSums(d), 1, function(x) if(!any(is.nan(x))) f(mg14:::roundProp(x * 100,p=100)) else rep(NA,100)))
s <- cumsum(table(droplevels(donor2type[sample2donor[rownames(d)]][o])))
col <- RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)] ## Colors for early-subclonal
par(fig=c(0,1,0,1),mar=c(1,4,1,1)+.1, mgp=c(2,.5,0), mfrow=c(3,1), bty="n", las=2, xpd=FALSE)
image(z=I[o,], x=1:nrow(I), useRaster=TRUE, col=col, xaxt="n", ylab="SNVs")
abline(v=s, col='white')
image(z=J[o,], x=1:nrow(I),useRaster=TRUE, col=col, xaxt="n", ylab="Indels")
abline(v=s, col='white')
par(bty="n", xpd=NA)
plot(NA,NA, xaxt="n", yaxt="n", xlab="", ylab="", xlim=c(0, nrow(J)), ylim=c(0,1), xaxs="i", yaxs='i')
d0 <- s - diff(c(0,s))/2
d1 <- mg14:::mindist(d0,30)
segments(d0, 1.12, d0, 1.2)
segments(d0, 1.12, d1, 1.08)
segments(d1, 1.08, d1, 1)
mg14::rotatedLabel(x0 = d1, names(s), y0=1)
legend("bottom", fill=col, legend=paste(dimnames(finalGenotypes)[[3]]), bty="n", horiz=TRUE, title="Mutation timing")

#t <- 12/8
#dev.copy2pdf(file="finalMutationProp.pdf", width=9*t, height=2.7*t, pointsize=8*t)

6.2.2 Figure 3a

f <- function(x) unlist(sapply(seq_along(x), function(i) rep(i, x[i])))
d <- t(sapply(names(finalSnv)[whiteList &  selectedSamples], function(n) table(info(finalSnv[[n]])$CLS, useNA='a') + table(info(finalIndel[[n]])$CLS, useNA='a')))
o <- order(droplevels(donor2type[sample2donor[rownames(d)]]), -d[,1]/rowSums(d))
I <- t(apply(d/rowSums(d), 1, function(x) f(mg14:::roundProp(x * 100,p=100))))
s <- cumsum(table(droplevels(donor2type[sample2donor[rownames(d)]][o])))

col <- RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)] ## Colors for early-subclonal
par(fig=c(0,1,0,1),mar=rep(0,4), bty="n", tcl=-0.25)
layout(matrix(1:5,nrow=5), height=c(1,4,1.2,0.8,4))
par(cex=1)
plot(NA,NA, xaxt="n", yaxt="n", xlab="", ylab="", xlim=c(0, nrow(I)), ylim=c(0,1), xaxs="i", yaxs='i')
legend("bottom", fill=col, legend=paste(dimnames(finalGenotypes)[[3]]), bty="n", horiz=TRUE, title="Mutation timing", cex=1)
par(mar=c(0,4,0,0)+.1, mgp=c(2,.5,0), bty="n", las=2, xpd=FALSE, cex=1)
image(z=I[o,], x=1:nrow(I), useRaster=TRUE, col=col, xaxt="n", ylab="Point mutations")
abline(v=s, col='white')
u <- par("usr")
par(bty="o")
barplot(t(t(table(droplevels(donor2type[sample2donor[rownames(d)]][o])))), horiz=TRUE, col=tissueColors[names(s)], border=NA, xlim=u[1:2], yaxs='i', xaxt="n")
par(bty="n", xpd=NA)
plot(NA,NA, xaxt="n", yaxt="n", xlab="", ylab="", xlim=c(0, nrow(I)), ylim=c(0,1), xaxs="i", yaxs='i')
d0 <- s - diff(c(0,s))/2
d1 <- mg14:::mindist(d0,60)
segments(d0, 0.66, d0, 1)
segments(d0, 0.66, d1, 0.33)
segments(d1, 0.33, d1, 0)
mg14::rotatedLabel(x0 = d1, names(s), y0=0)

#t <- 12/8
#dev.copy2pdf(file="finalMutationPropAll.pdf", width=9*t, height=1.8*t, pointsize=8*t)

6.2.3 Barplot drivers

p <- asum(finalGenotypesP[,,,selectedSamples[whiteList]], c(2,4))
g <- asum(finalGenotypes[,,,,selectedSamples[whiteList]], c(2,4:5))
g <- g[order(rowSums(g), decreasing=TRUE),]
colnames(g) <- paste(colnames(g))
rownames(g) <- paste(rownames(g)) 
rownames(p) <- paste(rownames(p))
p <- p[rownames(g),]
w <- rowSums(g) > 0
w[1] <- FALSE

Unique loci

l <- sapply(strsplit(rownames(p),"::"), function(x) paste(x[2:3], collapse=":"))
pu <- t(sapply(unique(l), function(u) asum(p[l==u,,drop=FALSE], 1)))
gu <- t(sapply(unique(l), function(u) asum(g[l==u,,drop=FALSE], 1)))
gu <- gu[order(rowSums(gu), decreasing=TRUE),]
pu <- pu[rownames(gu),]
wu <- rowSums(gu) > 0
wu[1] <- FALSE
par(fig=c(0,1,0,1),mar=c(1,4,1,1)+.1, mgp=c(3,.5,0))
barplot(t(gu[wu,]), col=col, las=2, legend=TRUE, args.legend=list("topright", bty='n'), ylab="Number of cases", names.arg=rep("",sum(wu)), border=NA)
#mg14::rotatedLabel(x=.Last.value,labels=rownames(g)[62:201], cex=.25)

u <- par("usr")
v <- c(
        grconvertX(u[1:2], "user", "ndc"),
        grconvertY(u[3:4], "user", "ndc")
)
v <- c( (v[1]+v[2])/3.33, v[2], (v[3]+v[4])/3, v[4] )
par( fig=v, new=TRUE, mar=c(0,0,0,0) )
b <- barplot(t(gu[2:51,]), col=col, las=2,  names.arg=rep("",50))
mg14::rotatedLabel(x=b,labels=rownames(gu)[2:51], cex=.5)

#dev.copy2pdf(file="finalDrivers.pdf", width=9, height=5, pointsize=8)

6.2.4 Barpot drivers - proportions

par(fig=c(0,1,0,1),mar=c(3,4,1,1)+.1, mgp=c(3,.5,0))
w <- rowSums(pu) > 0
n <- 50
b <- barplot(t(pu /rowSums(pu))[,w], width=c(rep(2,n+1), rep(0.2,sum(w)-n-1)), space=c(0,2,rep(0.1,n), rep(0,sum(w)-n-2)), col=col, border=NA, ylab="Fraction of mutations", names.arg=rep("",sum(w)))
mg14::rotatedLabel(x=b[1:(n+1)],labels=c("Genome-wide", rownames(pu)[2:(n+1)]), cex=.5)

#s <- 12/8
#dev.copy2pdf(file="finalDriversProp.pdf", width=9*s, height=3*s, pointsize=8*s)

6.2.5 Cumulative effects

tt <- abind::abind(pu[-1,], pu[-1,] + 0.5, along=3)

par(mar=c(3,3,1,1), mgp=c(2,.5,0), bty="L")
r <- array(apply(tt/rep(colSums(tt), each=nrow(tt)), 3, function(x) apply(x, 2, function(y) cumsum(sort(y, decreasing=TRUE)))), dim=dim(tt))
plot(cumsum(sort(r[,1,1], decreasing=TRUE)), col=NA, type='s', xlab="Number of different driver genes", ylab="Fraction of driver mutations", log='', ylim=c(0,1), xlim=c(0,664), xaxs='i', yaxs='i')
for(j in 1:4) {
    polygon(c(1:nrow(r), nrow(r):1), c(r[,j,1], rev(r[,j,2])), col=paste0(col[j],"33"), border=NA)
    lines((r[,j,1]+r[,j,2])/2, col=col[j], lwd=2)
    points(y=0,x=which.min((r[,j,1]+r[,j,2])/2 < 0.5), col=col[j], pch="|")
}
legend("bottomright", col=col[1:4], lty=1, paste0(c("clonal [early]", "clonal [late]", "clonal [other]", "subclonal"), ", n=", round(colSums(p[-1,]))[-5]), bty="n")
abline(h=0.5, lty=3)

#dev.copy2pdf(file="finalGenesCumulative.pdf", width=4,height=4)

6.2.6 Figure 3d

par(mar=c(4,3,2.5,1), mgp=c(2,.5,0), bty="L")
d50 <- apply((r[,,1]+r[,,2])/2 < 0.5, 2, which.min)[c(1,3,2,4)]
b <- barplot(d50,las=2, col=col[c(1,3,2,4)], border=NA, ylab="Genes contributing 50% of driver mutations")
segments(b,apply(r[,,1] < 0.5, 2, which.min)[c(1,3,2,4)],b,apply(r[,,2] < 0.5, 2, which.min)[c(1,3,2,4)])
mg14::rotatedLabel(x=b,labels=c("clonal [early]", "clonal [late]", "clonal [other]", "subclonal")[c(1,3,2,4)])

#dev.copy2pdf(file="finalGenes50.pdf", width=3,height=4)

7 Whole-genome duplications

7.1 Prelim

Final ploidy, weighted if subclonal CN

finalPloidy <- sapply(finalBB, averagePloidy)
names(finalPloidy) <- names(finalBB)

Final homozygousity, weighted if subclonal CN

finalHom <- sapply(finalBB, averageHom)
names(finalHom) <- names(finalBB)

7.2 WGD classification

7.2.1 Based on ploidy and homozygousity

isWgd <- .classWgd(finalPloidy, finalHom)
plot(finalHom, finalPloidy, col=.classWgd( finalPloidy, finalHom)+1, xlim=c(0,1))

7.2.2 Based on timing

fracGenomeWgdComp <- t(sapply(finalBB, function(bb) {
                    fgw <- try(fractionGenomeWgdCompatible(bb)); 
                    if(class(fgw)!='try-error') fgw
                    else rep(NA,10)}))
rownames(fracGenomeWgdComp) <- names(finalBB)

wgdStar <- factor(rep(1,nrow(fracGenomeWgdComp)), levels=0:3, labels=c("unlikely","uninformative","likely","very likely"))
wgdStar[fracGenomeWgdComp[,"avg.ci"]<=0.75 & fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] >= 0.33 ] <- "likely"
wgdStar[fracGenomeWgdComp[,"nt.wgd"]/fracGenomeWgdComp[,"nt.total"] < 0.66] <- "unlikely"
wgdStar[wgdStar=="likely" & fracGenomeWgdComp[,"nt.wgd"]/fracGenomeWgdComp[,"nt.total"] > 0.8 & fracGenomeWgdComp[,"sd.wgd"] < 0.1 &  fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] > 0.5] <- "very likely"
names(wgdStar) <-  names(finalBB)
prop.table(table(wgdStar[!isWgd]))
## 
##      unlikely uninformative        likely   very likely 
##   0.203061224   0.775510204   0.019387755   0.002040816
wgdPoss <- !isWgd & 2.5 - 1.5 * finalHom <= finalPloidy

wgdStat <- factor(wgdPoss + 2*isWgd - wgdPoss*isWgd, labels=c("absent","possible","present"))
table(wgdStat, wgdStar)
##           wgdStar
## wgdStat    unlikely uninformative likely very likely
##   absent        384          1492      9           0
##   possible       14            28     29           4
##   present        68             1    573         176

8 Temporal distribution of chromosomal gains

8.1 Functions

This one aggregates individual segments by chromosome

aggregatePerChromosome <- function(bb, isWgd=FALSE){
    .aggregateSegments <- function(m){
        #m <- mcols(bb)
        t <- weighted.mean(m$time, m$n.snv_mnv, na.rm=TRUE)
        n <- sum(m$n.snv_mnv[!is.na(m$time)], na.rm=TRUE)
        sd <- sd(m$time, na.rm=TRUE)
        ci <- weighted.mean(m$time.up-m$time.lo, m$n.snv_mnv, na.rm=TRUE)
        w <- sum(m$width[!is.na(m$time)], na.rm=TRUE)
        c(time=t, n=n, sd=sd, ci=ci,w=w)
    }
#   if(!isWgd){
    s <- split(as.data.frame(bb)[,c("time","time.up","time.lo","n.snv_mnv","width")], seqnames(bb))
    r <- t(sapply(s, .aggregateSegments))
    r <- r[c(1:22,"X"),]
#   }else{
    w <- .aggregateSegments(as.data.frame(bb))
    r <- rbind(r,WGD=w)
#   }
    return(r)
}

8.2 Aggregate

allChrAgg <- simplify2array(mclapply(finalBB, aggregatePerChromosome, mc.cores=2))

t <- allChrAgg[1:23,"time",!isWgd]
t[allChrAgg[1:23,"w",!isWgd] < diff(chrOffset)[1:23]*.33] <- NA

s <- split(as.data.frame(t(t)), droplevels(donor2type[sample2donor[names(finalSnv)]])[!isWgd])
n <- 10


at <- function(x, n){
    if(sum(!is.na(x))<3) return(rep(sum(!is.na(x))/n,n))
    bw=if(sum(!is.na(x))< 6) 0.5 else "nrd0"
    d <- density(x, n=n, from=1/n/2, to=1-1/n/2, bw=bw, na.rm=TRUE)
    d$y/sum(d$y)*d$n
}

allChrCancerHist <- sapply(s, apply, 2, at, n=n, simplify="array")
u <- split(data.frame(WGD=allChrAgg["WGD","time",isWgd]), droplevels(donor2type[sample2donor[names(finalSnv)]])[isWgd])
wgdCancerHist <- sapply(u, function(x) if(nrow(x)>0){at(x$WGD,n=n)}else{rep(0,n)}, simplify="array")
allChrCancerHist <- abind::abind(allChrCancerHist, All=sapply(sapply(s, as.matrix), at, n=n, simplify="array")/23*5, WGD=wgdCancerHist, along=2)

8.3 Per tumour type

prgn <- RColorBrewer::brewer.pal(11,"PRGn")
set1 <- RColorBrewer::brewer.pal(9,"Set1")
col <- colorRampPalette(set1[c(4,9,3)])(n)

p <- 0
v <- table(droplevels(donor2type[sample2donor[names(finalSnv)]]))
h <- (allChrCancerHist + p)  / rep(v + p, each=prod(dim(allChrCancerHist)[1:2]))
h <- aperm(h, c(2,3,1))

a <- colMeans(h[c("All","WGD"),,] * c(23/5,1)) %*% 1:n / asum(h* c(23/5,1), c(1,3))
o <- order(-a)
h <- h[,o,]
w <- v[o]>=15 & apply(h, 2, max) > 0.05*8/n
h <- h[,w,]

m <- 0.02
layout(matrix(1:prod(dim(h)[1:2]+1), ncol=dim(h)[1]+1, byrow=TRUE), height=c(rev(apply(h, 2, max))+m, 0.15), width=c(5, rep(1,dim(h)[1])))
par(mar=c(0.05,0.1,0,0.1), xpd=NA)
for(j in dim(h)[2]:0+1) for(i in 0:dim(h)[1]+1) {
        #if(all(h[i,j,]==0)) 
        if(i==1 & j !=1) {plot(NA,NA,xlab="",ylab="", xaxt="n",yaxt="n",xlim=c(0,1),ylim=c(0,1), bty="n")
            text(1,0,dimnames(h)[[2]][j-1],pos=2)
            next
        }
        if(j ==1 ){
            plot(NA,NA,xlab="",ylab="", xaxt="n",yaxt="n",xlim=c(0,1),ylim=c(0,1), bty="n")
            if(i==1) next
            text(0.5,1,dimnames(h)[[1]][i-1],pos=1)
            next
        }
        r <- c(0,max(h[,j-1,]+m))
        par(bty=if(i==2)"L" else "n")
        barplot(h[i-1,j-1,], ylim=r, width=1/n,space=0, col=rev(col), xaxt="n", yaxt="n", xlab="",ylab="", border=NA,xpd=TRUE, yaxs="i", xaxs="i", xlim=c(-0.5/n,1+0.5/n))
        axis(side=1, at=c(-0.5/n,1+0.5/n), labels=c("",""), tcl=-.1)
        if(i>1)
            abline(v=0, col='lightgrey', lty=3)
        if(i==2){
            abline(h=0.05*8/n, col='lightgrey', lty=1)
            axis(side=2, at=c(0,0.05*8/n), labels=c("",""), tcl=-.1)
        }
    }

#dev.copy2pdf(file="histTiming.pdf",width=6, height=6, pointsize=8)


vv <- v[dimnames(h)[[2]]]
vv <- vv/sum(vv)

hh <- matrix(matrix(aperm(h, c(1,3,2)), ncol=length(vv)) %*% vv, nrow=nrow(h))
rownames(hh) <- rownames(h)

8.4 Pan-Can histograms

par(mar=c(3,3,1,1), mgp=c(2,.5,0), tcl=-0.5, bty="L", xpd=NA)
barplot(hh["WGD",], space=0, col=rev(col), xlab="Time [mutations]", ylab="Relative frequency", width=0.1, ylim=c(0,.065), yaxs='r', border=NA)
axis(side=1)

barplot(hh["All",], space=0, col=rev(col), xlab="Time [mutations]", ylab="Relative frequency", width=0.1, ylim=c(0,.065), yaxs='r', border=NA)
axis(side=1)

#dev.copy2pdf(file="histTimingPanCan.pdf",width=2, height=2, pointsize=8)

9 Synchronous gains

9.1 Classification

d <- fracGenomeWgdComp
i <- d[,"avg.ci"]<=0.5 & d[,"chr.all"] > 2 #&  fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] >= 0.1
timingClass <- paste(ifelse(isWgd,"WGD","ND"), ifelse(!i, "uninformative",""))
timingClass[i] <- paste0(timingClass[i], ifelse(d[i,"nt.wgd"]/d[i,"nt.total"] > 0.75,"sync","async"))
#timingClass[i] <- paste0(timingClass[i], cut(fracGenomeWgdComp[i,"nt.wgd"]/fracGenomeWgdComp[i,"nt.total"], c(0,0.5,0.8,1), include.lowest=TRUE))
timingClass <- factor(timingClass)

9.1.1 Figure 2d

#pdf("TimingClass.pdf", 4,4)
colTime <- c("#A0C758","#6B8934","#BEC6AD","#CEB299","#CC6415","#EF7B00")
names(colTime) <- levels(timingClass)[c(4,5,6,3,2,1)]
c <- c(RColorBrewer::brewer.pal(9, "Pastel1"),"#DDDDDD")
t <- table(timingClass)[names(colTime)]
pie(t, init.angle=90, labels=paste0(names(t), ",\nn=", t), col=colTime)
#t <- table(isWgd)
par(new=TRUE)
symbols(x=0,y=0,circles=0.4, inches=FALSE, add=TRUE, bg="white")

#pie(t, labels=c("",""), col=NA, lwd=5, lty=1, init.angle=90)
#dev.off()

colnames(d) <- c("ntCoamp","ntAmp","timeCoamp","segCoamp","segAmp","chrCoamp","chrAmp", "sdTimeCoamp","avgCiSeg","sdAllSeg")
timingInfo <- data.frame(avgPloidy=finalPloidy, avgHom=finalHom, isWgd=isWgd, d, informative=i, timingClass=timingClass)
#tab <- rbind(tab, data.frame(WGD_call=otherStat, WGD_timing=NA, ploidy=otherPloidy, hom=otherHom, nt.wgd=NA, nt.total=NA, time.wgd=NA, sd.wgd=NA,avg.ci=NA, sd.all=NA))
write.table(file=paste0(Sys.Date(),"-Timing-info.txt"), timingInfo, quote=FALSE, row.names=TRUE, col.names=TRUE, sep="\t")

9.2 Timing examples

9.2.1 Figure 2c

w <- which(wgdStar=="likely" & !isWgd)
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[3])

#dev.off()

w <- which(wgdStar=="very likely" & isWgd)
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[9])
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): qbeta(a, *) =: x0 with |pbeta(x0,*) - alpha| = 0.022338 is not
## accurate
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): qbeta(a, *) =: x0 with |pbeta(x0,*) - alpha| = 0.024964 is not
## accurate
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): full precision may not have been achieved in 'qbeta'

#dev.off()

w <- which(wgdStar=="unlikely" & !isWgd & fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] > 0.25 & fracGenomeWgdComp[,"avg.ci"] < 0.5)
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[3])

#dev.off()

9.3 GBM examples

w <- which(fracGenomeWgdComp[,"time.wgd"]<0.1 & fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] > 0.1 &  !isWgd & donor2type[sample2donor[names(finalBB)]]=="CNS-GBM")
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[3])

#dev.off()

9.4 Relationship with mutation rates

Calculate number of substitutions and deciles per tumour type

n <- nSub <- sapply(finalSnv, nrow)
n[timingInfo$timeCoamp==0] <- NA
q <- unlist(sapply(split(n, donor2type[sample2donor[names(finalSnv)]]), function(x) as.numeric(cut(x, {if(sum(!is.na(x))>1) quantile(x, seq(0,1,0.1), na.rm=TRUE) else 1:10}, include.lowest=TRUE))))
m <- match(names(finalSnv),unlist(split(names(finalSnv), donor2type[sample2donor[names(finalSnv)]])))
t <- timingInfo$timeCoamp
table(decSub=q[m], time=cut(t, seq(0,1,0.1)))
##       time
## decSub (0,0.1] (0.1,0.2] (0.2,0.3] (0.3,0.4] (0.4,0.5] (0.5,0.6] (0.6,0.7] (0.7,0.8] (0.8,0.9] (0.9,1]
##     1       19        14        12        23        27        18        25        28        40      13
##     2       13        11        12        18        18        18        21        32        29      28
##     3       15        11        16        13        15        18        31        34        24      21
##     4       16        13        13        10        22        16        12        28        37      29
##     5        8        13        14        14        15        18        18        36        35      34
##     6       15         8        20        11        12        18        19        21        38      34
##     7        8        13        14        12        16        15        26        26        37      26
##     8       13         5        16        15        16        19        23        29        37      28
##     9       20        18        10        15        20        14        16        31        25      28
##     10      27        17        14        17        13        23        17        25        24      40

Also calculate deciles of timing per tumour type

t[t==0] <- NA
r <- unlist(sapply(split(t, donor2type[sample2donor[names(finalSnv)]]), function(x) as.numeric(cut(x, {if(sum(!is.na(x))>1 & length(unique(x)) > 2) quantile(jitter(x), seq(0,1,0.1), na.rm=TRUE) else 1:10}, include.lowest=TRUE))))
table(decSub=q[m], decTime=r[m])
##       decTime
## decSub  1  2  3  4  5  6  7  8  9 10
##     1  25 25 29 22 21 20 13 23 16 20
##     2  16 20 21 16 21 22 22 19 19 23
##     3  21 18 15 27 12 25 26 17 18 15
##     4  20 14 23 16 21 24 19 18 19 21
##     5  12 27 16 20 20 13 15 26 28 24
##     6  22 14 20 14 19 21 25 17 22 20
##     7   9 19 23 26 18 26 17 12 23 19
##     8  15 24 22 16 19 22 23 15 24 20
##     9  25 21 17 23 18 16 15 25 11 24
##     10 40 18 14 21 23 20 19 13 18 27

Plot

#pdf("timeNsub.pdf", 3, 2.5, pointsize=8)
par(mar=c(3,4,1,1), bty="n", mgp=c(2,.5,0), las=1, tcl=-.25) 
d <- as.character(donor2type[sample2donor[names(finalSnv)]])
lineCol <- tissueColors
lineCol[grep("Lung", names(lineCol))] <- "black"
plot(t, nSub, log='y', bg=tissueColors[d], pch=21, xlab="Typical amplification time", ylab="", cex=.66, lwd=.5, yaxt="n", ylim=c(100,3e6))
mtext(side=2, "Number of SNVs", line=3, las=3)
u <- round(par("usr")[3:4])
a <- axisTicks(par("usr")[3:4], log=TRUE)
axis(side=2, at=a, labels=prettyNum(a))
b <- sapply(a[-length(a)], function(x) (1:10)*x)
axis(side=2, at=b, labels=rep("", length(b)), tcl=-.1)

#dev.off()

9.5 Secondary gains

Load preprocessed data, aggregated by chromsome

load("two_gain_times.RData")
doubleGains <- as.data.frame(T.i.F)
m <- paste(doubleGains$sample, doubleGains$cnMaj, doubleGains$cnMin, doubleGains$chromosome, sep="_")
s <- split(doubleGains[,c("sample","tumor_type","T1_raw","T2_raw","n_mutations")], m)
doubleGainsAggregated <- Reduce("rbind",sapply(s, function(x) {
                    data.frame(sample=x$sample[1], tumor_type=x$tumor_type[1], T1_raw=weighted.mean(x$T1_raw, x$n_mutations),T2_raw=weighted.mean(x$T2_raw, x$n_mutations), n_mutations=sum(x$n_mutations))
                }, simplify=FALSE))

Plot Pan-Can

x <- doubleGainsAggregated$T1_raw/pmax(1, doubleGainsAggregated$T2_raw)
y <- doubleGainsAggregated$T2_raw/pmax(1, doubleGainsAggregated$T2_raw)
o <- order(doubleGainsAggregated$n_mutations, decreasing=TRUE)
plot(x[o], 
        y[o], 
        bg=tissueColors[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])], pch=21,
        col=tissueBorder[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])],
        xlab="Time [mutations], first gain",
        ylab="Time [mutations], second gain",
        cex=sqrt(doubleGainsAggregated$n_mutations[o]/500)+0.1,
        lwd=0.5)

t <- table(doubleGainsAggregated$sample)

Plot by timing class

names(timingClass) <- names(finalSnv)
par(mfrow=c(2,2))
for(l in grep("uninformative",levels(timingClass), invert=TRUE, value=TRUE)){
    w <- which(timingClass[doubleGains$sample]==l)
    o <- intersect(order(doubleGainsAggregated$n_mutations, decreasing=TRUE),w)
    plot(x[o], 
            y[o], 
            bg=tissueColors[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])], pch=21,
            col=tissueBorder[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])],
            xlab="Time [mutations], first gain",
            ylab="Time [mutations], second gain",
            cex=sqrt(doubleGainsAggregated$n_mutations[o]/500)+0.1)
    title(main=l, line=0, font.main=1)
}

Individual samples

par(mfrow=c(5,5))
for(i in as.numeric(names(t)[t>5])[1:25]){
    w <- which(doubleGainsAggregated$sample==i)
    plot(x[w],y[w], 
            col=tissueBorder[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[w]]]])], 
            bg=tissueColors[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[w]]]])], 
            type='p', xlim=c(0,1), ylim=c(0,1), 
            xlab="time 1",
            ylab="time 2",
            pch=21,
            cex=sqrt(doubleGainsAggregated$n_mutations[w]/500+0.1))
    
}

Relative latency

w <- y < 1 & x > 0
r <- ((y-x)/(1-x))
h <- hist(r[w], breaks=seq(0,1,0.025), plot=FALSE)
e <- d <- density(r[w], from=-1, to=2, bw="SJ")
i <- which(d$x < 0)
d$y[max(i) + seq_along(i)] <-  d$y[max(i) + seq_along(i)] + d$y[rev(i)]
i <- which(d$x > 1)
d$y[min(i) -  seq_along(i)] <-  d$y[min(i) -  seq_along(i)] + d$y[i]
i <- which(d$x >0 & d$x < 1)
d <- list(x=d$x[i], y=d$y[i])
plot(h$mids,h$counts/sum(h$counts),  pch=19, col='grey',ylim=c(0,max(h$counts/sum(h$counts))), xlab="Latency of second gain", ylab="Relative frequency", type='h')

#lines(d, xlim=c(0,1), type='l')

plot(d$x,cumsum(d$y * diff(d$x)[1]), xlim=c(0,1), type='l', ylim=c(0,1), xlab="Relative time of second gain", ylab="CDF")

9.5.1 Figure 2f

By timing class

c <- cut(r[w], 20)
t <- table(timingClass[doubleGainsAggregated$sample[w]],c)
barplot(t[names(colTime),]/sum(t), border=NA, col=colTime, width=1/24, space=0.2, names.arg=rep("",20, bty="L", yaxs="s"))
.par()
axis(side=1, line=0.2)

Copy number increments

cn <- do.call("rbind", sapply(names(finalBB), function(n){
                    bb <- finalBB[[n]]
                    data.frame(sample=n, chr=seqnames(bb), width=width(bb), M=bb$major_cn, m=bb$minor_cn)}, simplify=FALSE))
t <- table(pmin(cn$M,3) ,  pmax(3,round(log10(cn$width),1)), timingClass[cn$sample])
x <- as.numeric(colnames(t))
plot(NA,NA, type='p', col=colTime[1], pch=16, ylim=c(0,0.8), xlim=range(10^x), xlab="Length of segment", ylab="Proportion >2 allelic copies", log='x')
for(n in dimnames(t)[[3]]) {
    y <- as.numeric(t[4,,n]/colSums(t[3:4,,n]))
    lines(10^x,y, type='p', col=paste0(colTime[n],"44"), pch=16, cex=1)#sqrt(colSums(t[3:4,,i]/1000)))
    lines(10^x, predict(loess(y ~x)), col=colTime[n], lwd=2)
}

9.5.2 Figure 2e

tt <- mg14:::asum(t[,x>=7,],2)
o <- names(colTime)
p <- tt[4,o]/colSums(tt[3:4,o])
ci <- sapply(c(0.025, 0.975), qbeta, 0.025, shape1=tt[4,o]+1, shape2=tt[3,o]+1)
barplot(p, col=colTime, border=NA, las=2, ylab="Proportion >2 allelic copies", names=sub("ormative","",sub("near-diploid", "ND", names(colTime))), ylim=c(0,0.4)) -> b
segments(b, ci[,1], b, ci[,2])

Simulate higher order gains to cross-check

n <- 100
c <- 40
purity=0.7
bb <- GRanges(seqnames=1, IRanges(1,1e8), major_cn=3, minor_cn=1, clonal_frequency=purity, n.snv_mnv=n)
bb$total_cn <- bb$major_cn+bb$minor_cn
t3 <- 0.8
t2 <- 0.8 # Simultaneous second amplification
d <- data.frame(cluster=1, n_ssms=1, proportion=purity)
cnStates <- defineMcnStates(bb,clusters=d, purity=purity)
pi <- matrix(c(4,2,1,0,1,0,0,0,1), byrow=TRUE, ncol=3) %*% c(1-t2,t2-t3,t3)
pi <- pi/sum(pi)
cnStates[[1]][,"P.m.sX"] <- pi
rho=0.01
cnStates[[1]][,"power.m.s"] <- 1-pbetabinom(2, size=c, prob=cnStates[[1]][,"f"], rho=rho )

bb$timing_param <- cnStates
s <- simplify2array(mclapply(1:50, function(foo){
                    set.seed(foo)
                    v <- simulateMutations(bb, n=40)
                    bb0 <- bb
                    bb0$timing_param <- NULL
                    L <- computeMutCn(v, bb0, clusters=d, purity=purity, rho=rho, n.boot=0)
                    L$P[[1]]
                }))
boxplot(t(s[2:3,"T.m.sX",]), at=3:2, xlab="Simulated time point", names=c("t2","t3"))
points(3:2,c(t2-t3, t3), col='red', pch=19)

l <- s[2,"T.m.sX",]/(1-s[3,"T.m.sX",])
x <- seq(0,1,0.05)
plot(x[-1]+x[2]/2, as.numeric(prop.table(table(cut(l[l<1], x)))), xlab="Latency", ylab="frequency", type='h')
axis(side=1)

10 Real-time WGD & MRCA

age <- clinicalData$donor_age_at_diagnosis
names(age) <- clinicalData$icgc_donor_id

typeNa <- gsub("\t","",strsplit("Bone-Cart
                        Breast-LobularCa
                        Breast-DCIS
                        Lymph-NOS
                        Myeloid-MDS
                        Cervix-AdenoCa", "\n")[[1]])

10.1 MRCA

10.1.1 Prelim

10.1.1.1 Effective (time-averaged) genome size

Calculate effective genome size, i.e. time-averaged ploidy from mutation copy numbers

effGenome <- unlist(mclapply(finalSnv, function(vcf) {
                    w <- info(vcf)$CLS!="subclonal"
                    if(donor2type[sample2donor[meta(header(vcf))$META["ID",]]]=="Skin-Melanoma")
                        w <- w & isDeaminationNoUV(vcf)
                    else
                        w <- w & isDeamination(vcf)
                    2/avgWeights(vcf[na.omit(w)])
                }))
names(effGenome) <- names(finalSnv)

10.1.1.2 Power per (sub)clone

finalPower <- sapply(names(finalBB), function(n) {
            x <- finalBB[[n]]
            f <- finalClusters[[n]]$proportion
            for(i in 1:length(x)){
                t <- x$timing_param[[i]]
                p <- t[match(f, t[,"cfi"]), "power.s"]
                if(!is.null(p)) if(all(!is.na(p))) break
            }
            if(is.null(p)) return(rep(NA, length(f)))
            return(p)
        })
#plot(unlist(lapply(wccClusters[names(finalSnv)], `[[`, "n_ssms")),unlist(lapply(finalClusters[names(finalSnv)], `[[`, "n_ssms"))/ unlist(finalPower), log='xy',
#       xlab="Cluster size WCC (consensus)", ylab="Cluster size MutationTime.R") 

10.1.1.3 Branch lengths

The following calculates the length of the trunk (clonal mutations) and the depth of the MRCA, scaled by power and using a branching subclonal phylogeny.

branchDeam <- t(simplify2array(mclapply(finalSnv, function(vcf) {
                            n <- meta(header(vcf))$META["ID",]
                            if(donor2type[sample2donor[n]]=="Skin-Melanoma")
                                w <- isDeaminationNoUV(vcf)
                            else
                                w <- isDeamination(vcf)
                            if(sum(w)==0) return(c(0,0))
                            p <- info(vcf)$pSub[w]; 
                            n.subclonal <- aggregate(p, list(info(vcf)$CNF[w]), sum, na.rm=TRUE)
                            m <- apply(abs(outer(n.subclonal$Group.1, finalClusters[[n]]$proportion, `-`)),1,which.min) # Match to subclones
                            p.subclonal <- finalPower[[n]][m] # Power of subclones
                            b.subclonal <- n.subclonal$x %*% (n.subclonal$Group.1 / p.subclonal) / max(n.subclonal$Group.1) # Subclonal branch, power adjusted & 1/f-scaled
                            b.clonal <- sum(1-p, na.rm=TRUE)/finalPower[[n]][1] # Clonal branch (trunk), power adjusted & 1/f-scaled
                            c(b.subclonal, b.clonal)})))

d <- droplevels(donor2type[sample2donor[names(finalSnv)]])
typesSubclones <- setdiff(levels(d), c(typeNa, names(which(table(d)<5))))

nClones <- sapply(finalClusters, nrow)

Comparison to linear branching

branchDeamLinear <- t(simplify2array(mclapply(finalSnv, function(vcf) {
                            if(donor2type[sample2donor[meta(header(vcf))$META["ID",]]]=="Skin-Melanoma")
                                w <- isDeaminationNoUV(vcf)
                            else
                                w <- isDeamination(vcf)
                            if(sum(w)==0) return(c(0,0))
                            n <- meta(header(vcf))$META["ID",]
                            if(donor2type[sample2donor[n]]=="Skin-Melanoma")
                                w <- isDeaminationNoUV(vcf)
                            else
                                w <- isDeamination(vcf)
                            if(sum(w)==0) return(c(0,0))
                            p <- info(vcf)$pSub[w]; 
                            n.subclonal <- aggregate(p, list(info(vcf)$CNF[w]), sum, na.rm=TRUE)
                            m <- apply(abs(outer(n.subclonal$Group.1, finalClusters[[n]]$proportion, `-`)),1,which.min) # Match to subclones
                            p.subclonal <- finalPower[[n]][m] # Power of subclones
                            b.subclonal <- n.subclonal$x %*% (1 / p.subclonal)  # Subclonal branch, power adjusted 
                            b.clonal <- sum(1-p, na.rm=TRUE)/finalPower[[n]][1] # Clonal branch (trunk), power adjusted
                            c(b.subclonal, b.clonal)})))

Plot

f <- (branchDeam[,1] / finalPloidy) / rowSums(branchDeam / cbind(finalPloidy, effGenome))
l <- (branchDeamLinear[,1]/ finalPloidy)/rowSums(branchDeamLinear / cbind(finalPloidy, effGenome))
t <- donor2type[sample2donor[names(finalSnv)]]
plot(f, l, xlab="Subclonal branch length (branching)", ylab="Subclonal branch length (linear)", pch=21, bg=tissueColors[t], col=tissueBorder[t], cex=tissueCex[t])
abline(0,1, lty=2)

quantile(l/f, na.rm=TRUE)
##        0%       25%       50%       75%      100% 
##  1.000000  1.230433  1.787160  2.324245 18.979107
quantile(l, na.rm=TRUE)
##         0%        25%        50%        75%       100% 
## 0.00000000 0.01893107 0.09696972 0.27966436 0.98292792
quantile(f, na.rm=TRUE)
##          0%         25%         50%         75%        100% 
## 0.000000000 0.009730081 0.045141939 0.135827609 0.955712890

10.1.2 Mutation rates

Analyse relation to age, exclude hypermutators and samples with tumour in normal 1%.

rateDeam <- cc <- list()
remove <- "8454fe53-869d-41c8-b0c8-a7929d00eec3" # a cell line, add more samples in the following
par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1, xpd=FALSE)
for(n in typesSubclones){
    i <- d==n
    tt0 <- branchDeam[i,]/cbind(finalPloidy[i], effGenome[i]) / 3#cbind(nClones[i]-1, 1)/3 # 3Gb Haploid genome
    tt0[is.infinite(tt0)|is.nan(tt0)] <- 0
    yy <- rowSums(tt0)
    a <- age[sample2donor[names(finalSnv)[i]]]
    xx <- a
    r <- yy/xx 
    m <- median(r[TiN[names(xx)] <= 0.01 & ! is.na(TiN[names(xx)])],na.rm=TRUE)
    rateDeam[[n]] <- r
    try({
                w <- (r-m)^2/m^2 <= 2^2 & TiN[names(xx)] <= 0.01 & ! is.na(TiN[names(xx)])
                remove <- c(remove, names(which(!w)))
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n], pch=NA, log='', xlab="Age at diagnosis", ylab="SNVs/Gb", main=n, ylim=c(0,pmin(1000,max(yy, na.rm=TRUE))), xlim=c(0,max(age, na.rm=TRUE)),  cex.main=1)
                #par(xpd=NA)
                #segments(x0=0,y0=0, xx, yy, col=tissueLines[n], lty=tissueLty[n])
                points(xx, yy, bg=tissueColors[n], col=ifelse(w,tissueBorder[n], tissueColors[n]), pch=ifelse(w,21,4))
                abline(0, m, lty=3)
                #lines(c(x0,2*x0), c(0,1))
                #print(paste(n,cor(xx[w],yy[w],use='c'), cor(xx[w],tt0[w,] %*% c(0.2,1), use='c'), sep=": "))
                l <- lm(yy~xx, data=data.frame(yy=yy[w],xx=xx[w], row.names=as.character(seq_along(yy[w]))))
                f <- (summary(l))
                p <- predict(l,newdata=data.frame(xx=seq(0,100,1)), se=TRUE)
                polygon(c(seq(0,100,1),rev(seq(0,100,1))), c(p$fit - 2*p$se.fit, rev(p$fit+2*p$se.fit)), border=tissueBorder[n], col=paste0(tissueColors[n],"44"))
                v <- which(!is.na(xx[w]*yy[w]))
                cc[[n]] <- cbind(f$coefficients, f$cov.unscaled * f$sigma^2, coef(nnls::nnls(cbind(1,xx[w][v]), yy[w][v])))
            })
}
## Warning in predict.lm(l, newdata = data.frame(xx = seq(0, 100, 1)), se = TRUE): prediction from a rank-deficient fit may
## be misleading
## Warning in .Method(..., deparse.level = deparse.level): number of rows of result is not a multiple of vector length (arg
## 3)
n <- names(rateDeam)
qRateDeam <- sapply(rateDeam, function(r){
            m <- median(r[TiN[sample2donor[names(r)]] <= 0.01 & ! is.na(TiN[sample2donor[names(r)]])],na.rm=TRUE)
            w <- (r-m)^2/m^2 <= 2^2 & TiN[sample2donor[names(r)]] <= 0.01 & ! is.na(TiN[sample2donor[names(r)]])
            quantile(r[w], na.rm=TRUE)})
plot(sapply(rateDeam, median, na.rm=TRUE), pch=NA , ylab="SNVs/Gb/yr", main="CpG>TpG rate", ylim=c(0, max(qRateDeam)), cex.main=1, xaxt='n', xlab="Tumour type")
segments(seq_along(rateDeam),qRateDeam["0%",],seq_along(rateDeam), qRateDeam["100%",], col=tissueLines[n], lty=1)
points(sapply(rateDeam, median, na.rm=TRUE), pch=21, col=tissueBorder[n], bg=tissueColors[n])

length(remove)
## [1] 743

Rates as barplot

par(mar=c(6,3,1,1))
o <- order(qRateDeam["50%",])
barplot(qRateDeam["50%",][o], col=tissueColors[colnames(qRateDeam)][o], border=tissueLines[colnames(qRateDeam)][o], las=2,names.arg=rep("",ncol(qRateDeam)) , ylab="CpG>TpG rate [SNVs/Gb/yr]", ylim=c(0, max(qRateDeam))) -> b
mg14::rotatedLabel(b, labels=colnames(qRateDeam)[o])
segments(b, qRateDeam["50%",][o], b, qRateDeam["100%",][o], col=tissueLines[colnames(qRateDeam)][o], lwd=2)
segments(b, qRateDeam["0%",][o], b, qRateDeam["50%",][o], col=tissueBorder[colnames(qRateDeam)][o], lwd=2)

10.1.3 Figure 6a

tt0 <- branchDeam/cbind(finalPloidy, effGenome) / cbind(nClones-1, 1)/3 # 3Gb Haploid genome
tt0[is.infinite(tt0)|is.nan(tt0)] <- 0
m <- sapply(rateDeam, function(r){m <- median(r[TiN[sample2donor[names(r)]] <= 0.01 & ! is.na(TiN[sample2donor[names(r)]])],na.rm=TRUE)})
s <- rowSums(tt0)#/m[as.character(donor2type[sample2donor[names(finalSnv)]])] 
s[remove] <- NA
t <- donor2type[sample2donor[names(finalSnv)]]
x <- age[sample2donor[names(finalSnv)]]
plot(x,s, bg=tissueColors[t], pch=21, ylim=c(0,1000), col=tissueBorder[t], cex=tissueCex[t]*2/3, lwd=0.25, xlab="Age", ylab="SNVs/Gb")
p <- predict(loess(s~x), newdata=sort(x, na.last=NA), se=TRUE)
r <- function(x) c(x, rev(x))
polygon(r(sort(x, na.last=NA)), c(p$fit+2*p$se, rev(p$fit-2*p$se)), col="#00000044", border=NA)
lines(sort(x, na.last=NA),p$fit)

#s <- 12/8; dev.copy2pdf(file="timeSubcloneAgePancan.pdf", width=2*s, height=2*s, pointsize=8*s)

Positive intercept?

a <- simplify2array(cc[!names(cc) %in% c("Myeloid-AML","Bone-Epith")])
all(a[1,1,] + 2*a[1,2,]>0 )
## [1] TRUE

Positive slope?

all(na.omit(a[2,1,] + 2*a[2,2,]>0))
## [1] TRUE
plot(a[1,1,], a[2,1,], col=tissueColors[dimnames(a)[[3]]], pch=NA, xlab="Offset", ylab="SNVs/Gb/yr")
segments(a[1,1,], a[2,1,] - a[2,2,],a[1,1,], a[2,1,]+a[2,2,], col=tissueLines[dimnames(a)[[3]]], pch=19)
segments(a[1,1,]-a[1,2,], a[2,1,], a[1,1,]+a[1,2,], a[2,1,], col=tissueLines[dimnames(a)[[3]]], pch=19)
points(a[1,1,], a[2,1,], pch=21, bg=tissueColors[dimnames(a)[[3]]], col=tissueLines[dimnames(a)[[3]]])
abline(h=0, lty=3)
abline(v=0, lty=3)

Fraction of mutations due to linear accumulation

par(mar=c(6,3,1,1))
ma <- sapply(split(age, donor2type[names(age)]), median, na.rm=TRUE)
fm <- pmax(a[2,7,],0)*ma[dimnames(a)[[3]]]/(pmax(0,a[2,7,])*ma[dimnames(a)[[3]]] + pmax(0,a[1,7,]))*100
o <- order(fm)
fmq <- sapply(names(fm), function(n){
            aa <- mvtnorm::rmvnorm(10000, mean=a[,1,n], sigma=a[,5:6,n] )
            aa <- aa[aa[,1]>=0 & aa[,2]>=0,]
            quantile(pmax(aa[,2],0)*ma[n]/(pmax(0,aa[,2])*ma[n] + pmax(0,aa[,1])), c(0.025, 0.975))
        }) *100
barplot(fm[o], col=tissueColors[dimnames(a)[[3]]][o], border=tissueLines[dimnames(a)[[3]]][o], las=2,names.arg=rep("",length(fm)) , ylab="Age-attributed mutations [%]") -> b
mg14::rotatedLabel(b, labels=names(fm[o]))
segments(b, fm[o], b, fmq[2,o], col=tissueLines[dimnames(a)[[3]]][o], lwd=2)
segments(b, fmq[1,o], b, fm[o], col=tissueBorder[dimnames(a)[[3]]][o], lwd=2)
abline(h=min(fmq[2,]))
abline(h=max(fmq[1,]))

10.1.4 Hierarchical Bayesian models of deamination rates

Prepare data

library(rstan)
## Loading required package: ggplot2
## Loading required package: StanHeaders
## rstan (Version 2.17.3, GitRev: 2e1f913d3ca3)
## For execution on a local, multicore CPU with excess RAM we recommend calling
## options(mc.cores = parallel::detectCores()).
## To avoid recompilation of unchanged Stan programs, we recommend calling
## rstan_options(auto_write = TRUE)
y <- Reduce("c",rateDeam)
y <- y[!names(y) %in% remove]
x <- age[sample2donor[names(y)]]
y <- y*x
t <- donor2type[sample2donor[names(y)]]
d <- data.frame(x,y,t)
df <- d
df <- df[rowSums(is.na(df))==0,]
tt <- model.matrix(~droplevels(t)-1, data=df)

data <- list(n = nrow(df),
        p = ncol(tt),
        y = df$y,
        x = tt * df$x,
        t = tt
)

Model definition for stan

data {
  int<lower=0> n;       // numbr of observations
  int<lower=0> p;          // number of types
  vector<lower=0>[n] y;    // mutations
  matrix[n,p] x;        // age
  matrix[n,p] t;        // tumour type
}

parameters {
  real<lower=0> sigma; // const. variance 
  real<lower=0> tau; // time-dep variance
  real<lower=0> alpha;      // alpha for slope
  real<lower=0> beta;  // beta for slope
  real<lower=0> gamma;
  real<lower=0> delta;
  vector<lower=0>[p] offset;
  vector<lower=0>[p] slope;
}

transformed parameters {
  vector[n] mu;
  vector[n] nu;
  vector[p] ones;
  ones = rep_vector(1, p);
  mu = x * slope + t * offset;
  nu = sqrt( square(x * ones)  * tau^2 + sigma^2);
}

model {
 slope ~ gamma(alpha, beta);
 offset ~ gamma(gamma, delta);
 y ~ normal(mu, nu); 
}

Fit model

fit <- stan(
        file = "PCAWG-rates.stan",  # Stan program
        data = data,            # named list of data
        chains = 1,             # number of Markov chains
        warmup = 1000,          # number of warmup iterations per chain
        iter = 2000,            # total number of iterations per chain
        cores = 1,              # number of cores 
        refresh = 1000,         # show progress every 'refresh' iterations
        open_progress=FALSE,
        seed=42
)
## In file included from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/BH/include/boost/config.hpp:39:0,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/BH/include/boost/math/tools/config.hpp:13,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core/var.hpp:7,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core/gevv_vvv_vari.hpp:5,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core.hpp:12,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/mat.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/src/stan/model/model_header.hpp:4,
##                  from file13a6455385603.cpp:8:
## /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/BH/include/boost/config/compiler/gcc.hpp:186:0: warning: "BOOST_NO_CXX11_RVALUE_REFERENCES" redefined [enabled by default]
##  #  define BOOST_NO_CXX11_RVALUE_REFERENCES
##  ^
## <command-line>:0:0: note: this is the location of the previous definition
## In file included from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core.hpp:44:0,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/mat.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/src/stan/model/model_header.hpp:4,
##                  from file13a6455385603.cpp:8:
## /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core/set_zero_all_adjoints.hpp:14:17: warning: ‘void stan::math::set_zero_all_adjoints()’ defined but not used [-Wunused-function]
##      static void set_zero_all_adjoints() {
##                  ^
## 
## SAMPLING FOR MODEL 'PCAWG-rates' NOW (CHAIN 1).
## 
## Gradient evaluation took 0.01 seconds
## 1000 transitions using 10 leapfrog steps per transition would take 100 seconds.
## Adjust your expectations accordingly!
## 
## 
## Iteration:    1 / 2000 [  0%]  (Warmup)
## Iteration: 1000 / 2000 [ 50%]  (Warmup)
## Iteration: 1001 / 2000 [ 50%]  (Sampling)
## Iteration: 2000 / 2000 [100%]  (Sampling)
## 
##  Elapsed Time: 327.67 seconds (Warm-up)
##                298.35 seconds (Sampling)
##                626.02 seconds (Total)
## Warning: There were 6 divergent transitions after warmup. Increasing adapt_delta above 0.8 may help. See
## http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## Warning: Examine the pairs() plot to diagnose sampling problems

Collect parameters

s <- summary(fit, pars=c("offset","slope"))$summary
ab <- array(s, dim=c(ncol(tt),2,10), dimnames=list(levels(droplevels(t)), c("a","b"), colnames(s)))

Summary plot

plot(x,y, bg=tissueColors[t], pch=21, ylim=c(0,1000), col=tissueBorder[t], cex=tissueCex[t]*2/3, lwd=0.25, xlab="Age", ylab="SNVs/Gb")
for(i in 1:nrow(ab))
    abline(ab[i,1,"50%"], ab[i,2,"50%"], col=tissueLines[levels(droplevels(t))[i]], lty=tissueLty[levels(droplevels(t))[i]])

10.1.5 Extended Data Figure 6b

plot(ab[,1,"50%"], ab[,2,"50%"], col=tissueColors[dimnames(ab)[[1]]], pch=NA, xlab="Offset", ylab="SNVs/Gb/yr", xlim=range(ab[,1,c("2.5%","97.5%")]), ylim=range(ab[,2,c("2.5%","97.5%")]))
segments(ab[,1,"50%"], ab[,2,"2.5%"],ab[,1,"50%"], ab[,2,"97.5%"], col=tissueLines[dimnames(ab)[[1]]], pch=19)
segments(ab[,1,"2.5%"], ab[,2,"50%"],ab[,1,"97.5%"], ab[,2,"50%"], col=tissueLines[dimnames(ab)[[1]]], pch=19)
points(ab[,1,"50%"], ab[,2,"50%"], pch=21, bg=tissueColors[dimnames(ab)[[1]]], col=tissueLines[dimnames(ab)[[1]]])
abline(h=0, lty=3)
abline(v=0, lty=3)

a <- extract(fit, pars="offset")$offset
b <- extract(fit, pars="slope")$slope
colnames(a) <- colnames(b) <- levels(droplevels(t))

10.1.6 Extended Data Figure 6a

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1, xpd=FALSE)
d <- droplevels(t)
for(n in levels(d)){
    i <- d==n
    yy <- y[i]
    xx <- x[i]
    m <- median(yy/xx, na.rm=TRUE)
    try({
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n], pch=21, log='', xlab="Age at diagnosis", ylab="SNVs/Gb", main=n, ylim=c(0,pmin(1000,max(yy, na.rm=TRUE))), xlim=c(0,max(x, na.rm=TRUE)),  cex.main=1)
                #points(xx, yy, bg=tissueColors[n], col=ifelse(w,tissueBorder[n], tissueColors[n]), pch=ifelse(w,21,4))
                abline(0, m, lty=3)
                x0 <- seq(0,100,1)
                p <- apply(sapply(x0, function(x) a[,n] + b[,n]*x), 2, quantile, c(0.025,0.975), na.rm=TRUE)
                polygon(c(x0,rev(x0)), c(p["2.5%",], rev(p["97.5%",])), border=tissueBorder[n], col=paste0(tissueColors[n],"44"))
            })
}

Fraction of mutations due to linear accumulation

q <- sapply(colnames(a), function(n){
            w <- which(t==n & !is.na(y))
            f <- sapply(w, function(j) x[j] * b[,n] / (a[,n] + x[j] * b[,n]))
            quantile(rowMeans(f), c(0.025, 0.25, .5,.75,.975))
        })*100

qPanCan=quantile(rowMeans(do.call("cbind",sapply(colnames(a), function(n){
                                    w <- which(d==n & !is.na(y))
                                    f <- sapply(w, function(j) x[j] * b[,n] / (a[,n] + x[j] * b[,n]))
                                }))),
        c(0.025, 0.25, .5,.75,.975))*100

10.1.7 Extended Data Figure 6c

par(mar=c(6,3,1,1))
o <- order(q["50%",])
barplot(q["50%",o], col=tissueColors[colnames(q)][o], border=tissueLines[colnames(q)][o], las=2,names.arg=rep("",length(q["50%",])) , ylab="Age-attributed mutations [%]", ylim=c(0,100)) -> b
mg14::rotatedLabel(b, labels=names(q["50%",o]))
segments(b, q["50%",][o], b, q["97.5%",o], col=tissueLines[colnames(q)][o], lwd=2)
segments(b, q["2.5%",o], b, q["50%",][o], col=tissueBorder[colnames(q)][o], lwd=2)
abline(h=min(q["97.5%",]), lty=3)
abline(h=max(q["2.5%",]), lty=3)

#abline(h=qPanCan["50%"], lty=4)

Qualitative behaviour, simulating 0-15yrs with 5x acceleration

set.seed(42)
x <- df$x
a <-  runif(length(x), pmax(0.5, 1-15/x), 1) #
r <- rgamma(length(x), 10, 10)
y <- rpois(length(x), (a + (1-a)*5) * r * x * 6 * 0.2)/6
y[x < 40] <- NA
plot(x,y, ylim=c(0,max(y, na.rm=TRUE)), xlab="Age", ylab="SNVs/Gb", pch=21, bg="grey", lwd=0.5)
f <- lm(y~x)
summary(f)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -16.580  -5.146  -0.878   4.171  31.728 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.31347    1.01438   5.238 1.82e-07 ***
## x            0.21375    0.01583  13.504  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.311 on 1696 degrees of freedom
##   (280 observations deleted due to missingness)
## Multiple R-squared:  0.09708,    Adjusted R-squared:  0.09655 
## F-statistic: 182.4 on 1 and 1696 DF,  p-value: < 2.2e-16
c <- coef(f)
abline(c)

mean(c[1] / (c[1]+ x*c[2]), na.rm=TRUE)
## [1] 0.3297523

10.1.8 Timing

Acceleration values to simulate

accel <- c(1,2.5,5,7.5,10)
names(accel) <- paste0(accel, "x")

The actual timing

set.seed(42)
d <- droplevels(donor2type[sample2donor[names(finalSnv)]])

computeSubclonesTimeAbs <- function(l, b) {
    i <- d==l
    tt0 <- b[i,]/cbind(finalPloidy[i], effGenome[i]) #/ cbind(nClones[i]-1, 1)
    resB <- sapply(1:1000, function(foo){ ## Assess the impact of Poisson fluctuations on numbers
                tt <- matrix(rpois(length(tt0), lambda=tt0), ncol=ncol(tt0))
                res <- sapply(accel, function(a)  tt[,1]/a/rowSums(tt/rep(c(a,1), each=nrow(tt)))) * age[sample2donor[names(finalSnv)[i]]]
                colnames(res) <- paste0(accel, "x")
                #res[res==0] <- NA
                res}, simplify='array')
    res <- sapply(accel, function(a)  tt0[,1]/a/rowSums(tt0/rep(c(a,1), each=nrow(tt0)))) * age[sample2donor[names(finalSnv)[i]]]
    colnames(res) <- paste0(accel, "x") 
    resCI <- apply(resB,1:2, quantile, c(0.1,0.9), na.rm=TRUE)
    arr <- abind::abind(res, resCI, along=1)
    rownames(arr)[1] <- "hat"
    arr <- aperm(arr, c(2,1,3))
    tt0[is.infinite(tt0)|is.nan(tt0)] <- 0
    r <- which(rowSums(b[i,]) < 50 ) ## Exclude samples with less than 50 subs 
    arr[r,,] <- NA
    return(arr)
}

subclonesTimeAbs <- mclapply(typesSubclones, computeSubclonesTimeAbs, b=branchDeam)
subclonesTimeAbsLinear <- mclapply(typesSubclones, computeSubclonesTimeAbs, b=branchDeamLinear)
names(subclonesTimeAbsLinear) <- names(subclonesTimeAbs) <- typesSubclones

guessAccel <- sapply(subclonesTimeAbs, function(x) "5x")
guessAccel["Ovary-AdenoCa"] <- guessAccel["Liver-HCC"] <- "7.5x"
guessAccel[grep('CNS', names(guessAccel))] <- "2.5x"

10.1.9 Figure 6h

u <- setdiff(names(finalSnv)[uniqueSamples], remove)
par( mar=c(7,3,1,1), mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
qSubclone <- sapply(subclonesTimeAbs, function(x) apply(x[,"hat",][rownames(x)%in%u,,drop=FALSE], 2, quantile, c(0.05,0.25,0.5,0.75,0.95), na.rm=TRUE), simplify='array')
a <- "5x"
subclonesTimeAbsType <- sapply(names(subclonesTimeAbs), function(n) {x <- subclonesTimeAbs[[n]]; x[,,guessAccel[n]][setdiff(rownames(x),remove), 1:3, drop=FALSE]})
m <- diag(qSubclone["50%",guessAccel[dimnames(qSubclone)[[3]]],])#t[1,3,]
names(m) <- dimnames(qSubclone)[[3]]
m[sapply(subclonesTimeAbsType, function(x) sum(!is.na(x[,1]))) < 5] <- NA
o <- order(m, na.last=NA)
plot(NA,NA, xlim=c(0.5,length(m[o])), ylab="Years before diagnosis", xlab="", xaxt="n", yaxs="i", ylim=c(0,30))
abline(h=seq(10,20,10), col="#DDDDDD", lty=3)
x <- seq_along(m[o])
mg14::rotatedLabel(x, labels=names(sort(m)))
for(i in seq_along(o))try({
                n <- names(m)[o[i]]
                f <- function(x) x/max(abs(x))
                a <- guessAccel[n]
                bwd <- 0.8/2
                j <- if(length(na.omit(subclonesTimeAbsType[[o[i]]][,"hat"]))>1) f(mg14::violinJitter(na.omit(subclonesTimeAbsType[[o[i]]][,"hat"]))$y)/4 + i else i
                tpy <- 2
                segments(j, na.omit(subclonesTimeAbsType[[o[i]]][,"90%"]), j, na.omit(subclonesTimeAbsType[[o[i]]][,"10%"]), col=mg14::colTrans(tissueLines[n],tpy))
                points(j, na.omit(subclonesTimeAbsType[[o[i]]][,"hat"]), pch=21, col=mg14::colTrans(tissueBorder[n], tpy), bg=mg14::colTrans(tissueColors[n],tpy), 
                        cex=tissueCex[n]*2/3, lwd=1)
                rect(i-bwd,qSubclone["25%",a,n],i+bwd,qSubclone["75%",a,n], border=tissueLines[n],  col=paste(tissueColors[n],"44", sep=""))
                segments(i-bwd,qSubclone["50%",a,n],i+bwd,qSubclone["50%",a,n],col=tissueLines[n], lwd=2)
                segments(i,qSubclone["75%",a,n],i,qSubclone["95%",a,n],col=tissueLines[n], lwd=1.5)
                segments(i,qSubclone["5%",a,n],i,qSubclone["25%",a,n],col=tissueLines[n], lwd=1.5)
                f <- function(x) x/max(abs(x))
            })

#par(xpd=TRUE)
#s <- 12/8
#dev.copy2pdf(file="realTimeSubclone.pdf", width=6*s, height=3.5*3/5*s, pointsize=8*s)

sapply(subclonesTimeAbs, nrow)
##     Biliary-AdenoCa         Bladder-TCC         Bone-Benign          Bone-Epith      Bone-Osteosarc      Breast-AdenoCa 
##                  35                  23                  16                  10                  38                 198 
##          Cervix-SCC             CNS-GBM         CNS-Medullo           CNS-Oligo       CNS-PiloAstro    ColoRect-AdenoCa 
##                  18                  41                 146                  18                  89                  60 
##         Eso-AdenoCa            Head-SCC        Kidney-CCRCC        Kidney-ChRCC       Kidney-PapRCC           Liver-HCC 
##                  98                  57                 111                  45                  33                 326 
##        Lung-AdenoCa            Lung-SCC          Lymph-BNHL           Lymph-CLL         Myeloid-AML         Myeloid-MPN 
##                  38                  48                 107                  95                  11                  55 
##       Ovary-AdenoCa        Panc-AdenoCa      Panc-Endocrine       Prost-AdenoCa       Skin-Melanoma  SoftTissue-Leiomyo 
##                 113                 241                  85                 286                 107                  15 
## SoftTissue-Liposarc     Stomach-AdenoCa         Thy-AdenoCa      Uterus-AdenoCa 
##                  19                  75                  48                  51

10.1.10 Extended Data Figure 6g

Comparison of branching v linear

subclonesTimeAbsTypeLinear <- sapply(names(subclonesTimeAbsLinear), function(n) {x <- subclonesTimeAbsLinear[[n]]; x[,,guessAccel[n]][setdiff(rownames(x),remove), 1:3, drop=FALSE]})
qSubcloneLinear <- sapply(subclonesTimeAbsLinear, function(x) apply(x[,"hat",][rownames(x)%in%u,,drop=FALSE], 2, quantile, c(0.05,0.25,0.5,0.75,0.95), na.rm=TRUE), simplify='array')
n <- diag(qSubcloneLinear["50%",guessAccel[dimnames(qSubcloneLinear)[[3]]],])#t[1,3,]

par( mar=c(5,3,3,10), mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="n", xpd=FALSE, las=1)
plot(c(rep(1, length(m)), rep(2, each=length(n))), c(m,n), bg=tissueColors[c(names(m), names(n))], pch=21, cex=1, xaxt="n", ylab="Years after MRCA", xlab="", xlim=c(0.5,2.5), ylim=c(0, max(n, na.rm=TRUE)))
segments(rep(1, each=length(m)), m, rep(2, each=length(n)), n,col=tissueLines[names(m)], lty= ifelse(sapply(subclonesTimeAbsType, nrow) <= 5, 3, tissueLty[names(m)]))
o <- order(n, na.last=NA)
y0 <- n[o]
y1 <- mg14:::mindist(n[o], diff(par('usr')[3:4])/30)
par(xpd=NA)
mtext(names(m)[o], at=y1, side=4 )
segments(2.1,y0,2.2,y0)
segments(2.2,y0,2.3,y1)
segments(2.3,y1,2.4,y1)
mg14::rotatedLabel(1:2, labels=c("Branching","Linear"))

Numbers per decade

yy <- do.call("rbind",subclonesTimeAbsType)
yy <- yy[setdiff(rownames(yy), remove),"hat"]
table(cut(yy, seq(0,60,10)))
## 
##  (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] 
##    1863      27       4       2       1       0

10.2 WGD

10.2.1 Functions

Calculate relative timing estimates based on deaminations.

computeWgdParamDeam <- function(vcf, bb, clusters, purity){
    # 1. Find segments compatible with WGD
    min.dist <- 0.05
    m <- findMainCluster(bb)
    l <- pmin(bb$time.lo, bb$time - min.dist)
    u <- pmax(bb$time.up, bb$time + min.dist)
    o <- which(l <= m & u >= m)
    
    # 2. Find deaminations in compatible segments
    w <- which(info(vcf)$MajCN==2 & sapply(info(vcf)$CNID, length)==1 & isDeamination(vcf) & vcf %over% bb[o])
    if(donor2type[sample2donor[meta(header(vcf))$META["ID",]]]=="Skin-Melanoma")
        w <- intersect(w, which(isDeaminationNoUV(vcf)))
    v <- vcf[w]
    if(nrow(v)<=100) return(NULL) # At least 100 SNVs
    seqnames(rowRanges(v)) <- factor(3-info(v)$MinCN, levels=seqlevels(v))
    v <- sort(v)
    
    # 3. Merged CN segments
    b <- GRanges(1:3, IRanges(rep(1,3),rep(max(end(v)),3)), copy_number=4:2, major_cn=2, minor_cn=2:0, clonal_frequency=as.numeric(purity))
    
    # 4. Calculate times
    l <- computeMutCn(v, b, clusters, purity, isWgd=TRUE, n.boot=200, rho=0.01, xmin=3)
    b$n.snv_mnv <- l$n <- table(factor(info(v)$MinCN, levels=2:0))
    l$time <- bbToTime(b, l$P)
    return(l)
}

10.2.2 Timing

Takes ~1h.

wgdParamDeam <- mclapply(names(finalSnv)[isWgd], function(ID){
            try(computeWgdParamDeam(finalSnv[[ID]], finalBB[[ID]], clusters=finalClusters[[ID]], purity=finalPurity[ID]))
        })
names(wgdParamDeam) <- names(finalSnv)[isWgd]

Samples with insufficient data

void <- sapply(wgdParamDeam, function(x) is.null(x) | class(x)=="try-error")

Some checks

t <- sapply(wgdParamDeam[!void], function(x) {r <- as.matrix(x$time[,2:4]); rownames(r) <- x$time[,1];r}, simplify='array')
pairs(t(t[,"time",]))

Calculate acceleration-adjusted times

wgdTimeDeamAcc <- simplify2array(mclapply(names(wgdParamDeam[!void]), function(n) {
                    x <- wgdParamDeam[!void][[n]]
                    
                    T.clonal <- as.matrix(x$time[,2:4]) # Time of WGD as fraction of clonal                 
                    
                    n.subclonal <- aggregate(x$D[,"pSub"], list(x$D[,"CNF"]), sum)
                    m <- match(n.subclonal$Group.1, finalClusters[[n]]$proportion)
                    p.subclonal <- x$power.c[m] # Power of subclones
                    b.subclonal <- n.subclonal$x %*% (n.subclonal$Group.1 / p.subclonal) / max(n.subclonal$Group.1) # Subclonal branch, power adjusted & 1/f-scaled
                    b.clonal <- sum(1-x$D[,"pSub"])/p.subclonal['1'] # Clonal branch (trunk), power adjusted & 1/f-scaled
                    f.subclonal <- b.subclonal / (b.subclonal + b.clonal)
                    G.clonal <- sum (1-x$D$pSub)/sum((1-x$D$pSub)*x$D$MutCN/(x$D$MajCN + x$D$MinCN)) # Effective ploidy clonal, adjusted for timing
                    G.subclonal <- sum(x$D$pSub*(x$D$MajCN + x$D$MinCN))/ sum (x$D$pSub) # Final ploidy
                    if(is.nan(G.subclonal)) G.subclonal <- mean(x$D$MajCN + x$D$MinCN)
                    
                    ag <- age[sample2donor[names(finalBB)[isWgd][!void][j]]]
                    tmin <- max(0.5, 1-15/ag) # 15yrs or 50%, whatever smaller (median ~ 0.75 mutation time)
                    if(is.na(tmin)) tmin <- 0.8
                    ta=seq(tmin,1,l=20)
                    
                    .correctAccel <- function(T.clonal, f.subclonal, G.clonal, G.subclonal, ta, a){ # Helper function to correct accel a at clonal time ta
                        t1 <- T.clonal + (1-T.clonal) *(a-1)/a*ta #acc before dup
                        t2 <- T.clonal * (ta + a*(1-ta)) ## after
                        T.clonal.adj <- pmin(t1, t2) # as fraction of clonal
                        a.clonal <- ta + (1-ta)*a # effective rate, avg over clonal
                        T.subclonal.abs <- f.subclonal / G.subclonal / a
                        T.clonal.abs <- (1-f.subclonal) / G.clonal/ a.clonal
                        T.clonal.abs <- T.clonal.abs / (T.clonal.abs + T.subclonal.abs) # as fraction of all mutations
                        return(c(T.WGD=T.clonal.adj * T.clonal.abs, T.MRCA=T.clonal.abs))
                    }
                    
                    .correctAccelRand <- function(T.clonal, f.subclonal, G.clonal, G.subclonal, ta=seq(0.8,1,0.01), a=seq(1,10,1)){ # Helper to calculate range of accel a and times
                        sapply(ta, function(taa) sapply(a, function(aa) .correctAccel(T.clonal, f.subclonal, G.clonal, G.subclonal, taa, aa)), simplify='array')
                    }
                    
                    res <- apply(T.clonal, 1:2, .correctAccelRand, f.subclonal, G.clonal, G.subclonal, a=accel, ta=seq(tmin,1,l=20))
                    dim(res) <- c(2, length(accel), length(ta), dim(res)[-1])
                    return(res)
                    
                }))
dimnames(wgdTimeDeamAcc)[1:2] <- list(c("T.WGD","T.MRCA"), names(accel))
dimnames(wgdTimeDeamAcc)[[5]] <- colnames(wgdParamDeam[[1]]$time)[2:4] 
dimnames(wgdTimeDeamAcc)[[4]] <- levels(finalBB[[1]]$type)[c(3,1,2)]
dimnames(wgdTimeDeamAcc)[[6]] <- names(wgdParamDeam[!void])

n <- dimnames(wgdTimeDeamAcc)[[6]]
d <- droplevels(donor2type[sample2donor[n]])
s <- setdiff(levels(d), c(typeNa, names(which(table(d)<3))))

Calculate real time by scaling with age at diagnosis

f <- function(n, mu, a, b){ ## asymmetric normal to interpolate CIs of the timing estimates
    r <- rnorm(n, sd=a)
    w <- which(r>0)
    r[w] <- r[w]*(b/a)[w]
    return(r + mu)
}
wgdTimeAbs <- sapply(s, function(l) {
            set.seed(42)
            i <- d==l & ! n %in% c(rownames(purityPloidy)[purityPloidy$wgd_uncertain])
            
            ## absolute time by multiplying with age at diagnosis
            absTimeSeg <- aperm((1-wgdTimeDeamAcc["T.WGD",,,,,i]) * rep(age[sample2donor[n]][i], each = prod(dim(wgdTimeDeamAcc)[c(2,3,4,5)])))
            w <- t(sapply(wgdParamDeam[n[i]], `[[`, "n")) #number of SNV as weights
            
            ## remove NA due to zero mutations
            for(c in 1:3)
                absTimeSeg[,,c,,][is.na(absTimeSeg[,,c,,]) & w[,c]==0] <- 0
            
            ## weighted average over 2+0, 2+1 and 2+2 segments
            absTime <- (absTimeSeg[,,1,,] * w[,1] + absTimeSeg[,,2,,] * w[,2] + absTimeSeg[,,3,,] * w[,3]) / rowSums(w) 
            rownames(absTime) <- n[i]
            
            ## Median over acceleration onset
            absTimeMed <- apply(absTime, c(1,2,4), median, na.rm=TRUE) 
            colnames(absTimeMed) <- c("hat","up","lo")
            
            ## Simulate distribution sampling from timing onset and mutation time CI 
            ts <- sapply(1:1000, function(foo) {ax <- sample(1:20,1); matrix(f(length(absTime[,"time",ax,]),a=abs(absTime[,"time",ax,] - absTime[,"time.up",ax,])/2, b=abs(absTime[,"time.lo",ax,]-absTime[,"time",ax,])/2, mu=absTime[,"time",ax,]), nrow=dim(absTime)[1])}, simplify='array')
            me <- apply(ts, 1:2, quantile, c(0.1, 0.8), na.rm=TRUE) # 80% CIs
            absTimeMed[,"lo",] <- (me[1,,])
            absTimeMed[,"up",] <- (me[2,,])
            absTimeMed[,c(1,3,2),]
        }, simplify=FALSE)

10.2.3 Figure 6e

par( mar=c(7,3,1,1), mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
u <- setdiff(names(finalSnv)[uniqueSamples], remove)
qWgd <- sapply(wgdTimeAbs, function(x) apply(x[rownames(x) %in% u,"hat",], 2, quantile, c(0.05,0.25,0.5,0.75,0.95), na.rm=TRUE), simplify='array')
nWgd <- sapply(wgdTimeAbs, function(x) sum(x[rownames(x) %in% u,"hat","1x"]!=0, na.rm=TRUE))
wgdTimeAbsType <- sapply(names(wgdTimeAbs), function(n) {x <- wgdTimeAbs[[n]]; x[,,guessAccel[n]][setdiff(rownames(x),remove), 1:3, drop=FALSE]})
m <- diag(qWgd["75%",guessAccel[dimnames(qWgd)[[3]]],])#t[1,3,]
names(m) <- dimnames(qWgd)[[3]]
o <- order(m, na.last=NA)
x <- seq_along(m[o])
plot(NA,NA, xlim=c(0.5,length(m[o])), ylim=c(0,max(do.call('rbind',wgdTimeAbsType)[,1], na.rm=TRUE)+5), ylab="Years before diagnosis", xlab="", xaxt="n", yaxs="i")
abline(h=seq(10,60,10), col="#DDDDDD", lty=3)
mg14::rotatedLabel(x, labels=names(sort(m)))
for(i in seq_along(o)){
    n <- names(m)[o[i]]
    f <- function(x) x/max(abs(x))
    a <- guessAccel[n]
    j <- f(mg14::violinJitter(na.omit(wgdTimeAbsType[[o[i]]][,"hat"]))$y)/4 + i #rank(na.omit(tWgdByType[[o[i]]][,"hat"]))/2/length(na.omit(tWgdByType[[o[i]]][,"hat"]))-0.25+i #
    tpy <- if(grepl("Skin|Lung", n)) 4 else 2
    segments(j, na.omit(wgdTimeAbsType[[o[i]]][,"up"]), j, na.omit(wgdTimeAbsType[[o[i]]][,"lo"]), col=mg14::colTrans(tissueLines[n],tpy), lty=tissueLty[n])
    points(j, na.omit(wgdTimeAbsType[[o[i]]][,"hat"]), pch=21, col=mg14::colTrans(tissueBorder[n], tpy), bg=mg14::colTrans(tissueColors[n],tpy), 
            cex=tissueCex[n]*2/3, lwd=1)
    bwd <- 0.8/2
    rect(i-bwd,qWgd["25%",a,n],i+bwd,qWgd["75%",a,n], border=tissueLines[n],  col=paste0(tissueColors[n],"44"))
    segments(i-bwd,qWgd["50%",a,n],i+bwd,qWgd["50%",a,n],col=tissueLines[n], lwd=2)
    segments(i,qWgd["75%",a,n],i,qWgd["95%",a,n],col=tissueLines[n], lwd=1.5)
    segments(i,qWgd["5%",a,n],i,qWgd["25%",a,n],col=tissueLines[n], lwd=1.5)
}

par(xpd=TRUE)
#s <- 12/8
#dev.copy2pdf(file="realTimeWgd.pdf", width=4*s, height=3.5*s, pointsize=8*s)

Plot extremely early samples

t <- do.call("rbind", wgdTimeAbsType)
o <- order(t[,"hat"], na.last=NA)
for(n in rownames(t)[tail(o, 20)])
    plotSample(n, title=paste0(sub("-.+","",n),", ", donor2type[sample2donor[n]], ", ",round(t[n,"hat"]),"yr"))

Numbers per decade

yy <- do.call("rbind",wgdTimeAbsType)
yy <- yy[setdiff(rownames(yy), remove),"hat"]
table(cut(yy, seq(0,60,10)))
## 
##  (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] 
##     389      86      47      20      11       9

10.2.4 Figure 6f

WGD time v age at diagnosis

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1)
for(i in seq_along(wgdTimeAbsType)){
    n <- names(wgdTimeAbsType)[i]
    y <- wgdTimeAbsType[[n]][,"hat"]
    x <- age[sample2donor[names(y)]]
    plot(x,x-y, pch=NA, bg=tissueColors[n], col=tissueBorder[n], xlab="Age [yr]", ylab="WGD [yr]", cex=tissueCex[n], xlim=c(0,90), ylim=c(0,90))
    segments(x, y0=x-wgdTimeAbsType[[n]][,"up"],y1=x-wgdTimeAbsType[[n]][,"lo"],col=tissueLines[n])
    points(x,x-y, pch=21, bg=tissueColors[n], col=tissueBorder[n], cex=tissueCex[n])
#   d <- density(na.omit(x), bw="SJ", from=0)
#   lines(d$x,d$y*100,col=tissueLines[n], lty=tissueLty[n])
#   d <- density(na.omit(x-y), bw="SJ", from=0)
#   lines(d$y*100, d$x,col=tissueLines[n], lty=tissueLty[n])
    rug(x, col=tissueLines[n],)
    rug(x-y, side=2, col=tissueLines[n])
    title(main=n, line=0, font.main=1, cex.main=1)
    abline(0,1, lty=3)
}

10.2.4.1 Deaminations v all mutations

Scatter

t <- sapply(wgdParamDeam[!void], function(x) x$time$time)
plot(timingInfo[colnames(t),'timeCoamp'], 
        colMeans(t), 
        cex=sqrt(nSub[colnames(t)]/10000), 
        pch=21,bg=tissueColors[donor2type[sample2donor[colnames(t)]]], 
        col=tissueBorder[donor2type[sample2donor[colnames(t)]]],
        xlab="time [all mutations]",
        ylab="time [CpG>TpG]")
abline(0,1, lty=3)

Box

par(mar=c(6,4,1,1), xaxs='i')
boxplot(timingInfo[colnames(t),'timeCoamp'] - colMeans(t) ~ droplevels(donor2type[sample2donor[colnames(t)]]), 
        col=tissueColors[levels(droplevels(donor2type[sample2donor[colnames(t)]]))],
        na.rm=TRUE, las=2,
        lty=1,
        staplewex=0,
        pch=16,
        cex=0.8,
        ylab='time [all] - time [CpG>TpG]',
        names=NA
)
mg14::rotatedLabel(labels=levels(droplevels(donor2type[sample2donor[colnames(t)]])))
abline(h=0, lty=3)

10.2.5 Assessment of absolute mutation counts

Number of deaminatinos in 2:2 regions

nDeam22 <- sapply(wgdParamDeam[!void], function(x) if(!is.null(x$n)) as.numeric(x$n[1]) else NA)
w22 <- sapply(finalBB[isWgd][!void], function(bb) {
            w <- bb$major_cn==2 & bb$minor_cn==2 & !duplicated(bb)
            sum(as.numeric(width(bb)[w]), na.rm=TRUE)})
nDeam22 <- nDeam22/w22*1e9

Fraction of deam on 1 and 2 copies

d <- nDeam22 *  t(sapply(wgdParamDeam[!void], function(x) if(!is.null(x$P)) x$P[[1]][1:2,"P.m.sX"] else c(NA,NA)))
d[rownames(d) %in% remove] <- NA

Unadjusted time (inc. of subclonal mutations)

t0 <- colMeans(wgdTimeDeamAcc["T.WGD","1x",1,,"time",],na.rm=TRUE) 
names(t0) <- dimnames(wgdTimeDeamAcc)[[6]]

10.2.6 Extended Data Figure 6d&e

Plot time v early and total number of mutations

y <- d[names(t0),]/6
x <- t0
t <- donor2type[sample2donor[names(t0)]]
plot(x,y[,2], bg=tissueColors[t], pch=21,  col=tissueBorder[t], cex=tissueCex[t]*1, lwd=0.5, xlab="Time", ylab="Early SNVs/Gb", log='')
p <- predict(loess(y[,2]~x, span=1), newdata=sort(x, na.last=NA), se=TRUE)
r <- function(x) c(x, rev(x))
polygon(r(sort(x, na.last=NA)), c(p$fit+2*p$se, rev(p$fit-2*p$se)), col="#00000044", border=NA)
lines(sort(x, na.last=NA),p$fit)

plot(x,y[,1]+y[,2], bg=tissueColors[t], pch=21,  col=tissueBorder[t], cex=tissueCex[t]*1, lwd=0.5, xlab="Time", ylab="Total SNVs/Gb", log='')
p <- predict(loess(rowSums(y)~x, span=1), newdata=sort(x, na.last=NA), se=TRUE)
r <- function(x) c(x, rev(x))
polygon(r(sort(x, na.last=NA)), c(p$fit+2*p$se, rev(p$fit-2*p$se)), col="#00000044", border=NA)
lines(sort(x, na.last=NA),p$fit)

#s <- 12/8; dev.copy2pdf(file="nDeam22Time.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.7 Mutation burden

Age at diagnosis

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1, xpd=FALSE)
deamRateWgd <- list()
for(n in names(wgdTimeAbsType)){
    a <- age[sample2donor[rownames(wgdTimeAbsType[[n]])]]
    yy <- nDeam22[rownames(wgdTimeAbsType[[n]])]/(2-t0[rownames(wgdTimeAbsType[[n]])])
    xx <- a
    r <- yy/xx 
    m <- median(r,na.rm=TRUE)
    deamRateWgd[[n]] <- r
    try({
                w <- (r-m)^2/m^2 <= 2^2 
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n], pch=NA, log='', xlab="Age at diagnosis", ylab="SNVs/Gb", main=n, ylim=c(0,max(yy, na.rm=TRUE)), xlim=c(0,max(age, na.rm=TRUE)),  cex.main=1)
                par(xpd=NA)
                segments(x0=0,y0=0, xx, yy, col=tissueLines[n], lty=tissueLty[n])
                points(xx, yy, bg=tissueColors[n], col=ifelse(w,tissueBorder[n], tissueColors[n]), pch=ifelse(w,21,4))
                par(xpd=FALSE)
                #abline(l, lty=3)
                #abline(l$coef[1], l$coef[1])
                abline(0, m, lty=3)
                #lines(c(x0,2*x0), c(0,1))
            })
}
n <- names(deamRateWgd)
q <- sapply(deamRateWgd, function(r){
            m <- median(r,na.rm=TRUE)
            w <- (r-m)^2/m^2 <= 2^2 
            range(r[w], na.rm=TRUE)})
plot(sapply(deamRateWgd, median, na.rm=TRUE), pch=NA , ylab="SNVs/Gb/yr", main="CpG>TpG rate", ylim=c(0, max(q)), cex.main=1, xaxt='n', xlab="Tumour type")
segments(seq_along(deamRateWgd),q[1,],seq_along(deamRateWgd), q[2,], col=tissueLines[n], lty=1)
points(sapply(deamRateWgd, median, na.rm=TRUE), pch=21, col=tissueBorder[n], bg=tissueColors[n])

10.2.8 Acceleration adjustment relative to lowest quintile.

accelRelWgd <- sapply(names(wgdTimeAbs), function(n) {
            r <- rateDeam[[n]]
            x <- wgdTimeAbs[[n]]
            r0 <- quantile(r[!names(r) %in% remove], 0.20, na.rm=TRUE)
            a <- cut(pmin(pmax(1,(r/r0-0.9)/0.1),10), c(0,1.5,3.75,6.25,8.75,20), labels=c("1x","2.5x","5x","7.5x","10x"))
            print(table(a))
            names(a) <- names(r)
            ta <- sapply(rownames(x), function(ss) x[ss, "hat",a[ss]])
            ta
        })
## a
##   1x 2.5x   5x 7.5x  10x 
##   10    5    3    1   16 
## a
##   1x 2.5x   5x 7.5x  10x 
##    7    4    0    5    7 
## a
##   1x 2.5x   5x 7.5x  10x 
##    8    5    3    2   19 
## a
##   1x 2.5x   5x 7.5x  10x 
##   39   27   52   26   40 
## a
##   1x 2.5x   5x 7.5x  10x 
##    5    5    3    4    1 
## a
##   1x 2.5x   5x 7.5x  10x 
##   10    9   10    2   10 
## a
##   1x 2.5x   5x 7.5x  10x 
##   35   17   21    9   54 
## a
##   1x 2.5x   5x 7.5x  10x 
##   12   10   10    5   23 
## a
##   1x 2.5x   5x 7.5x  10x 
##   26   18   10   13   30 
## a
##   1x 2.5x   5x 7.5x  10x 
##   17    4    9    5   22 
## a
##   1x 2.5x   5x 7.5x  10x 
##   30   26   24   15   16 
## a
##   1x 2.5x   5x 7.5x  10x 
##    9    3    4    5   24 
## a
##   1x 2.5x   5x 7.5x  10x 
##   10    4    7    4    8 
## a
##   1x 2.5x   5x 7.5x  10x 
##   87  117   75   23   24 
## a
##   1x 2.5x   5x 7.5x  10x 
##    8    3    2    3   19 
## a
##   1x 2.5x   5x 7.5x  10x 
##   11    9   15    7    6 
## a
##   1x 2.5x   5x 7.5x  10x 
##   25   14   13   11   44 
## a
##   1x 2.5x   5x 7.5x  10x 
##   28   38   29   11    7 
## a
##   1x 2.5x   5x 7.5x  10x 
##   55   55   50   28   50 
## a
##   1x 2.5x   5x 7.5x  10x 
##   22    3    3    8   49 
## a
##   1x 2.5x   5x 7.5x  10x 
##   78   40   39   38   89 
## a
##   1x 2.5x   5x 7.5x  10x 
##   24   16   21    9   37 
## a
##   1x 2.5x   5x 7.5x  10x 
##    4    4    2    2    3 
## a
##   1x 2.5x   5x 7.5x  10x 
##    5    6    4    1    3 
## a
##   1x 2.5x   5x 7.5x  10x 
##   23    5    7    5   34 
## a
##   1x 2.5x   5x 7.5x  10x 
##   12   13    7    5   14
par(mar=c(3,3,1,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1)
x <- Reduce("c",accelRelWgd)
y <- Reduce("c",sapply(wgdTimeAbs, function(x) x[,"hat","5x"]))

t <- donor2type[sample2donor[names(x)]]
plot(y+runif(length(y)),x+runif(length(y)), pch=21, bg=tissueColors[t], col=tissueBorder[t], cex=tissueCex[t]*1, lwd=0.5, xlab="Time (constant acceleration)", ylab="Time (sample-specific accel.)", log='')

#s <- 12/8; dev.copy2pdf(file="accelRelWgd.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.9 Extended Data Figure 6f

Quantiles

par(mar=c(3,3,1,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1)
u <- setdiff(names(finalSnv)[uniqueSamples], remove)
qAccelRelWgd <- sapply(accelRelWgd, function(x){
            quantile(x[names(x) %in% u], na.rm=TRUE)
        })
t <- colnames(qAccelRelWgd)
plot(qWgd["50%","5x",], qAccelRelWgd["50%",], pch=NA,  xlab="Time [years], constant acceleration", ylab="Time [years], sample-specific accel.", xlim=c(0,30), ylim=c(0,30))
abline(0,1, lty=3)
segments(qWgd["25%","5x",], qAccelRelWgd["50%",],qWgd["75%","5x",], qAccelRelWgd["50%",], lty=tissueLty[t], col=tissueLines[t])
segments(qWgd["50%","5x",], qAccelRelWgd["25%",],qWgd["50%","5x",], qAccelRelWgd["75%",], lty=tissueLty[t], col=tissueLines[t])
points(qWgd["50%","5x",], qAccelRelWgd["50%",], bg=tissueColors[t], pch=21,  col=tissueBorder[t], cex=tissueCex[t], lwd=0.5)

#s <- 12/8; dev.copy2pdf(file="qAccelRelWgd.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.10 Average rate v time

Mutations per year vs time. If the mutation rate was constant, there should be a proportional increase due to the double opportunity to mutate after WGD.

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
for(n in names(wgdTimeAbsType)){
    a <- age[sample2donor[rownames(wgdTimeAbsType[[n]])]]
    yy <- nDeam22[rownames(wgdTimeAbsType[[n]])]/a
    xx <- 1-t0[rownames(wgdTimeAbsType[[n]])]#y[[n]][,"hat"]/a
    try({
                l <- lm(yy ~ xx)
                x0 <- -l$coef[2]/l$coef[1]
                #print(x0)
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n],, pch=21, log='', xlab="1-time [mutations]", ylab="SNVs/Gb/yr", main=n, ylim=c(0,max(yy, na.rm=TRUE)), xlim=c(0,max(xx, na.rm=TRUE)), cex.main=1)
                #abline(l, lty=3)
                #abline(l$coef[1], l$coef[1])
                m <- median(yy/(1+xx),na.rm=TRUE)
                abline(m, m, lty=3)
                #lines(c(x0,2*x0), c(0,1))
            })
}

10.2.11 Figure 6d

Conceptual plot

#par(mfrow=c(1,1), mar=c(3,3,1,1), mgp=c(2,0.5,0), bty="L")
x0 <- 70
y0 <- 1
a <- 5
plot(x0,y0, xlab="Time [yr]", ylab="Time [fraction of mutations]", pch=19, xlim=c(0,80), ylim=c(0,y0*1.1))
r <- seq(0.66,1,0.001)
yy <- c(0,y0*r/(a*(1-r)+r))
xx <- c(0,r)*x0
polygon(xx, yy, col="grey", border=NA)
for(i in seq(51, 341,30))
    lines(c(0,xx[i],x0), c(0,yy[i],y0), col='darkgrey')
t <- 3/5*y0
ta <- function(t0, a, ta){
    t1 <- t0 + (1-t0) *(a-1)/a*ta #acc before dup
    t2 <- t0 * (ta + a*(1-ta)) ## after
    tf <- pmin(t1, t2) # as fraction of clonal
    return(tf)
}
tf <- sapply(r, function(rr) ta(t/y0, a, rr))
tmax <- xx[which.min(abs(yy-t))]
tmin <- t/ y0*x0
lines(c(x0,x0,0), c(0,y0,y0), lty=3)
lines(c(tmax,tmax,0), c(0,t,t), lty=2)
lines(c(tmin,tmin,0), c(0,t,t), lty=2)
#d <- density(tf*x, from=tmin, to=tmax)
lines(quantile(tf, c(0.025,0.975))*x0, c(0,0), lwd=2)
points(c(tmin,median(tf)*x0), c(0,0), pch=c(1,19))
mtext(side=1, at=x0, text="Diagnosis", line=2)
text(x=0, y=t, labels="WGD", pos=4, adj=c(0,1))

#lines(d$x,d$y/max(d$y)*50)
#s <- 12/8; dev.copy2pdf(file="concept.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.12 Figure 6g

Median time v accel

par(mar=c(3,3,1,1), mgp=c(2,0.5,0), tcl=-0.25, bty="L")
plot(accel, qWgd["50%",,1], type='l', lty=0, ylim=c(0,30), xlab= "CpG>TpG rate acceleration", ylab="Median occurrence [years]", yaxs="i", xaxt="n")
axis(side=1, at=accel)
for(j in 1:dim(qWgd)[3]) lines(accel, qWgd["50%",,j], type='l', col=tissueLines[dimnames(qWgd)[[3]][j]], 
            lty=ifelse(nWgd[dimnames(qWgd)[[3]][j]]<=9, 3, tissueLty[dimnames(qWgd)[[3]][j]]))

#s <- 12/8; dev.copy2pdf(file="realTimeWgdAccel.pdf", width=2*s, height=2*s, pointsize=8*s)

10.3 MRCA v WGD

Scatter of median

par( mar=c(4,3,1,1), mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
a <- "5x"
plot(qSubclone["50%",a,dimnames(qWgd)[[3]]], qWgd["50%",a,], col=tissueColors[dimnames(qWgd)[[3]]], pch=16, cex=2, xlab="Median time subclones", ylab="Median time WGD", xlim=c(0,5), ylim=c(0,10))

Dotplot

par( mar=c(3,3,3,10), mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="n", xpd=FALSE, las=1)
w <- "50%"

x <- diag(qSubclone[w,guessAccel[dimnames(qSubclone)[[3]]],])#t[1,3,]
names(x) <- dimnames(qSubclone)[[3]]
y <- diag(qWgd[w,guessAccel[dimnames(qWgd)[[3]]],])#t[1,3,]
names(y) <- dimnames(qWgd)[[3]]

plot(c(rep(1, dim(qSubclone)[3]), rep(2, each=dim(qWgd)[3])), c(x,y), bg=tissueColors[c(dimnames(qSubclone)[[3]], dimnames(qWgd)[[3]])], pch=21, cex=1, xaxt="n", ylab="Years before diagnosis", xlab="", xlim=c(0.5,2.5), ylim=c(0, max(y, na.rm=TRUE)))
segments(rep(1, each=dim(qWgd)[3]), x[dimnames(qWgd)[[3]]], rep(2, each=dim(qWgd)[3]), y,col=tissueLines[dimnames(qWgd)[[3]]], lty= ifelse(nWgd <= 5, 3, tissueLty[dimnames(qWgd)[[3]]]))
o <- order(y, na.last=NA)
y0 <- y[o]
y1 <- mg14:::mindist(y[o], diff(par('usr')[3:4])/30)
par(xpd=NA)
mtext(dimnames(qWgd)[[3]][o], at=y1, side=4 )
segments(2.1,y0,2.2,y0)
segments(2.2,y0,2.3,y1)
segments(2.3,y1,2.4,y1)
mg14::rotatedLabel(1:2, labels=c("Subclones","WGD"))

#segments(2.1,y0,2.3,y1)

#par(xpd=TRUE)
#s <- 12/8
#dev.copy2pdf(file="realTimeSubcloneWgd.pdf", width=2.5*s, height=3.5*s, pointsize=8*s)

10.4 Multi-sample cases

donor2sample <- split(names(finalBB),sample2donor[names(finalBB)])
donor2sample <- donor2sample[sapply(donor2sample, length)>1]

10.4.1 WGD

WGD - samples with * removed

par(mfrow=c(2,3), mar=c(4,3,2,1), cex=1)
for(n in names(donor2sample)){
    t <- as.character(donor2type[n])
    try({
                s <- wgdTimeAbs[[t]][,,guessAccel[t]]
                s <- s[rownames(s) %in% donor2sample[[n]],,drop=FALSE]
                if(length(s) ==0  ) next 
                if(nrow(s) ==1) next
                plot(s[,"hat"], ylim=c(0, 30), main = paste(n, t), ylab="Time WGD [yr]", xlab="", xaxt="n", xlim=c(0,nrow(s)+1), pch=NA)
                mg14::rotatedLabel(labels=paste0(sample2icgc[rownames(s)],ifelse(rownames(s) %in% remove, "*","")))
                segments(x0=1:nrow(s),y0=s[,'lo'], y1=s[,'up'], col=tissueLines[t],lty=tissueLty[t])
                points(s[,"hat"], pch=21, bg=tissueColors[t], cex=tissueCex[t], col=tissueBorder[t])
                abline(h= mean(s[,'hat']), col=tissueLines[t], lty=3)
            })
}

10.4.2 MRCA

MRCA - samples with * removed

par(mfrow=c(8,8), mar=c(4,3,2,1), cex=1)
for(n in names(donor2sample)){
    t <- as.character(donor2type[n])
    try({
                s <- subclonesTimeAbs[[t]][,,guessAccel[t]]
                s <- s[rownames(s) %in% donor2sample[[n]],,drop=FALSE]
                if(length(s) ==0  ) next 
                if(nrow(s) ==1) next
                plot(s[,"hat"], ylim=c(0, 20), main = paste(n, t), ylab="Time WGD [yr]", xlab="", xaxt="n", xlim=c(0,nrow(s)+1), pch=NA)
                mg14::rotatedLabel(labels=paste0(sample2icgc[rownames(s)],ifelse(rownames(s) %in% remove, "*","")))
                par(xpd=NA)
                segments(x0=1:nrow(s),y0=s[,'10%'], y1=s[,'90%'], col=tissueLines[t],lty=tissueLty[t])
                points(s[,"hat"], pch=21, bg=tissueColors[t], cex=tissueCex[t], col=tissueBorder[t])
                par(xpd=TRUE)
                abline(h= mean(s[,'hat']), col=tissueLines[t], lty=3)
            })
}

11 Mutation spectra

Caclulate trinucleotide substitution spectra

tncTime <- simplify2array(mclapply(finalSnv, function(vcf) table(tncToPyrimidine(vcf), info(vcf)$CLS)))

11.1 Early to late clonal changes

Calculate cosine distance between clonal and subclonal, plot 10 samples with strongest change and 1000 SNVs each

w <- which(apply(mg14:::asum(tncTime[,c(1,2),], 1)>1000, 2, all))
dEarlyLate <- sapply(w, function(i) {x <- tncTime[,,i]; 1-cosineDist(x[,1,drop=FALSE],x[,2,drop=FALSE])})

makeTitle <- function(n){
    d <- sample2donor[n]
    paste0(sample2icgc[n], ", ", donor2type[d], ", ", age[d], "yr")
}

11.1.1 Figure 5a

n <- names(tail(sort(dEarlyLate),10))
sigCol <- sapply(c("#2196F3","#212121","#f44336","#BDBDBD","#8BC34A","#FFAB91"), rep,16)
ttl <- function(){
    l <- gsub("\\[|\\]||>.","", dimnames(tncTime)[[1]])
    mtext(text=l, at=b, las=2, cex=0.25, side=1)
    mtext(at=b[8+16*(0:5)], side=1,text=c("C>A","C>G","C>T","T>A","T>C","T>G"), las=1, line=1)
}
for(s in n){
    .par()
    par(mfrow=c(2,1), las=2, mar=c(2,3,2,1))    
    b <- barplot(as.numeric(tncTime[,1,s]), ylab="SNVs", main=makeTitle(s),col=sigCol,border=NA, font.main=1, las=2, cex.main=1)
    text(x=b[1],y=par("usr")[4], labels="early clonal", xpd=TRUE, adj=c(0,1))
    ttl()
    barplot(as.numeric(tncTime[,2,s]), ylab="SNVs", col=sigCol, border=NA,las=2)
    text(x=b[1],y=par("usr")[4], labels="late clonal", xpd=TRUE, adj=c(0,1))
    ttl()
}

LRT to test for spectral changes

tncLrt <- function(x){
    l1 <- dmultinom(x=x[,1], prob=x[,1], log=TRUE) + dmultinom(x=x[,2], prob=x[,2], log=TRUE)
    l0 <- dmultinom(x=x[,1], prob=x[,1]+x[,2], log=TRUE) + dmultinom(x=x[,2], prob=x[,1]+x[,2], log=TRUE)
    chisq <- 2*(l1-l0)
    df <- nrow(x)-1
    return(c(chisq=chisq, df=df, p=pchisq(chisq, df=df, lower.tail=FALSE)))
}

w <- which(colSums(tncTime[,1,])>0 & colSums(tncTime[,2,])>0) # Samples with at mutations in both categories
pEarlyLate <- apply(tncTime[,1:2,w],3, tncLrt)
table(p.adjust(pEarlyLate["p",], "bonf")<0.05)
## 
## FALSE  TRUE 
##  1327   525

Refit some mutational signatures

sbs <- read.csv("../ref/sigProfiler_SBS_signatures_2018_03_28.csv") # Official table

n <- names(which(sample2icgc=="SA434348"))
e <- nmSolve(tncTime[,,n], P = as.matrix(sbs[,grep("(SBS7[a-d])|SBS38|SBS40", colnames(sbs))]), maxIter=10000, tol=1e-6)
## 3333333333333456
a <- rbind(UV=colSums(e[1:4,]),e[5:6,])[,1:3]
apply(t(t(a)/colSums(a))*100,2,mg14:::roundProp)
##       clonal [early] clonal [late] clonal [NA]
## UV                89            23          72
## SBS38              2            37          11
## SBS40              9            40          17
n <- names(which(sample2icgc=="SA309724"))
e <- nmSolve(tncTime[,,n], P = as.matrix(sbs[,grep("SBS(2|13|4|5)$", colnames(sbs))]), maxIter=10000)
a <- rbind(APOBEC=colSums(e[c(1,4),]), e[2:3,])
apply(t(t(a)/colSums(a))*100,2,mg14:::roundProp)
##        clonal [early] clonal [late] clonal [NA] subclonal
## APOBEC             10            71          29        76
## SBS4               55             7          39         9
## SBS5               35            22          32        15
n <- names(which(sample2icgc=="SA100712"))
e <- nmSolve(tncTime[,,n], P = as.matrix(sbs[,grep("SBS(1|17.|18|5|40)$", colnames(sbs))]), maxIter=10000)
## 3
a <- rbind(`17`=colSums(e[c(3:4),]), e[-(3:4),])
apply(t(t(a)/colSums(a))*100,2,mg14:::roundProp)
##       clonal [early] clonal [late] clonal [NA] subclonal
## 17                 1            32          27        29
## SBS1              26             7          11         3
## SBS5              24            12          11         0
## SBS18             35            10          14        17
## SBS40             14            39          37        51

11.2 Clonal to subclonal changes

Calculate cosine distance between clonal and subclonal, plot 10 samples with strongest change and 1000 SNVs each

w <- which(mg14:::asum(tncTime[,1:3,], c(1,2))>1000 & mg14:::asum(tncTime[,4,], 1)>1000)
dClonalSubclonal <- sapply(w, function(i) {x <- tncTime[,,i]; 1-cosineDist(x[,1:3] %*% rep(1,3),x[,4,drop=FALSE])})

11.2.1 Extended Data Figure 5a

n <- names(tail(sort(dClonalSubclonal),10))
for(s in n){
    .par()
    par(mfrow=c(2,1), las=2, mar=c(2,3,2,1))    
    b <- barplot(as.numeric(rowSums(tncTime[,1:3,s])), ylab="SNVs", main=makeTitle(s),col=sigCol,border=NA, font.main=1, las=2, cex.main=1)
    text(x=b[1],y=par("usr")[4], labels="clonal", xpd=TRUE, adj=c(0,1))
    ttl()
    barplot(as.numeric(tncTime[,4,s]), ylab="SNVs", col=sigCol, border=NA,las=2)
    text(x=b[1],y=par("usr")[4], labels="subclonal", xpd=TRUE, adj=c(0,1))
    ttl()
}

TNC LRT

w <- which(mg14:::asum(tncTime[,1:3,], c(1,2))>0 & mg14:::asum(tncTime[,4,], 1)>0)
pClonalSubclonal <- apply(tncTime[,,w],3, function(x) tncLrt(x %*% matrix(c(1,1,1,0,0,0,0,1), ncol=2)))
table(p.adjust(pClonalSubclonal["p",], "bonf")<0.05)
## 
## FALSE  TRUE 
##  1677   710

12 Outputs

12.1 Real time WGD & MRCA

n <- names(finalSnv)
wgdMrcaTimingData <- data.frame(
        uuid=n,
        icgc_sample_id=sample2icgc[n], 
        icgc_donor_id=sample2donor[n], 
        tissue=donor2type[sample2donor[n]], 
        WGD=isWgd, 
        ploidy=finalPloidy,
        eff_ploidy=effGenome,
        purity=finalPurity,
        age=round(age[sample2donor[n]]),
        n_snv_mnv=sapply(finalSnv, nrow),
        CpG_TpG_trunk_pwradj=round(branchDeam[,2],2),
        CpG_TpG_subclonal_branch_pwradj=round(branchDeam[,1],2),
        CpG_TpG_subclonal_linear_pwradj=round(branchDeamLinear[,1],2),
        TiN = TiN[sample2donor[n]],
        remove = n %in% remove,
        accel = ifelse(n %in% remove,NA,guessAccel[as.character(donor2type[sample2donor[n]])]), 
        row.names=n)

t <- as.data.frame(round(Reduce("rbind", wgdTimeAbsType),2))
colnames(t) <- c("time", "time.lo","time.up")
nDeam <- sapply(wgdParamDeam[!void], function(x) if(!is.null(x$n)) sum(x$n, na.rm=TRUE) else NA)
w <- data.frame(row.names=rownames(t), t, `CpG_TpG_total`=nDeam[rownames(t)])
colnames(w) <- sub("lo", "10%", sub("up","90%", colnames(w)))

t <- cbind(branching=as.data.frame(round(Reduce("rbind", subclonesTimeAbsType),2)), linear=as.data.frame(round(Reduce("rbind", subclonesTimeAbsTypeLinear),2)))
colnames(t) <- sub("\\.hat","", colnames(t))

wgdMrcaTimingData <- cbind(wgdMrcaTimingData, 
        WGD=w[rownames(wgdMrcaTimingData),],
        MRCA.time=t[rownames(wgdMrcaTimingData),]
)

write.table(wgdMrcaTimingData, file=paste0(Sys.Date(),"-wgdMrcaTiming.txt"), sep="\t", quote=FALSE, row.names=FALSE)

12.2 All segments, MutationTime.R raw values

t <- do.call("rbind", mclapply(finalBB, function(bb) as.data.frame(bb[,c(1:6,38:47)])))
n <- rownames(t) 
t <- as.data.frame(lapply(t, function(x) if(class(x)=="numeric") round(x,3) else x)) 
t$sample <- sub("\\..+","",n)
write.table(t, file=paste0(Sys.Date(),"-allSegmentsTimeRaw.txt"), quote=FALSE, sep="\t")

12.3 Drivers

t <- as.data.frame(finalDriversAnnotated)[c(1,2,6,7,9,10,11,12,13,14,31:44)]
t <- as.data.frame(lapply(t, function(x) if(class(x)=="numeric") round(x,3) else x));
write.table(t, file=paste0(Sys.Date(),"-driversTiming.txt"), quote=FALSE, sep="\t")

13 Session

13.1 Commit

cat(system("git log -n1", intern=TRUE), sep="\n")
## commit d969ec8027c3c28fd1040b5c5739a2d2b2a7c06f
## Author: Moritz Gerstung <moritz.gerstung@ebi.ac.uk>
## Date:   Tue Jul 31 18:04:32 2018 +0100
## 
##     Added mutation spectra changes, references to Figures

13.2 Objects

l <- ls()
data.frame(variable=l, Reduce("rbind",lapply(l, function(x) data.frame(class=class(get(x)), size=format(object.size(get(x)), units="auto")))))
##                        variable        class      size
## 1                             a       matrix    1.1 Kb
## 2                            ab        array    8.7 Kb
## 3                         accel      numeric 528 bytes
## 4                   accelRelWgd         list     77 Kb
## 5                 addAssignment     function   11.7 Kb
## 6                     addDriver     function   26.1 Kb
## 7                addFinalDriver     function   16.1 Kb
## 8                      addMutCn     function   12.1 Kb
## 9                        addTNC     function   18.1 Kb
## 10                          age      numeric    180 Kb
## 11       aggregatePerChromosome     function   31.3 Kb
## 12                    allChrAgg        array    2.8 Mb
## 13             allChrCancerHist        array   78.5 Kb
## 14                    allGender   data.frame    1.2 Mb
## 15              applyPigeonHole     function   16.2 Kb
## 16                         asum     function    2.2 Kb
## 17                           at     function   14.5 Kb
## 18            averageEvenPloidy     function    8.5 Kb
## 19                   averageHom     function    7.4 Kb
## 20                averagePloidy     function    9.3 Kb
## 21                   avgWeights     function   10.6 Kb
## 22                            b       matrix 968 bytes
## 23                     basePath    character 152 bytes
## 24                           bb      GRanges   11.8 Kb
## 25                      bbFiles    character  40 bytes
## 26                       bbPath    character 216 bytes
## 27                     bbToTime     function   70.5 Kb
## 28                   betaFromCi     function   20.7 Kb
## 29                   branchDeam       matrix  304.2 Kb
## 30             branchDeamLinear       matrix  304.2 Kb
## 31                branchLengths     function   18.4 Kb
## 32                          bwd      numeric  48 bytes
## 33                            c      numeric 328 bytes
## 34                  CANCERGENES    character   48.4 Kb
## 35                           cc         list   39.9 Kb
## 36                    chrOffset      numeric    6.1 Kb
## 37                           ci       matrix 944 bytes
## 38            classifyMutations     function   56.5 Kb
## 39                     classWgd     function    1.7 Kb
## 40                 clinicalData   data.frame  874.1 Kb
## 41                     clusters   data.frame 944 bytes
## 42               clustersFromBB     function   12.4 Kb
## 43                           cn   data.frame  123.7 Mb
## 44                       cnPath    character 216 bytes
## 45                     cnStates         list    2.7 Kb
## 46                    cnWeights     function    8.6 Kb
## 47                          col    character 648 bytes
## 48                      colTime    character 936 bytes
## 49                 computeMutCn     function  319.4 Kb
## 50      computeSubclonesTimeAbs     function   44.2 Kb
## 51          computeWgdParamDeam     function     40 Kb
## 52       consensusClustersToOld     function    5.4 Kb
## 53                   cosineDist     function    6.6 Kb
## 54                            d       matrix   82.1 Kb
## 55                           d0      numeric    2.9 Kb
## 56                           d1      numeric    2.9 Kb
## 57                          d50      integer  56 bytes
## 58                         data         list    1.4 Mb
## 59                   dbetabinom     function    6.4 Kb
## 60             dClonalSubclonal      numeric   65.8 Kb
## 61                  deamRateWgd         list   66.4 Kb
## 62                   dEarlyLate      numeric   60.2 Kb
## 63              defineMcnStates     function  222.6 Kb
## 64                           df   data.frame  227.8 Kb
## 65                  distAsRange     function   16.6 Kb
## 66                 donor2sample         list   23.7 Kb
## 67                   donor2type       factor  188.5 Kb
## 68                  doubleGains   data.frame  295.1 Kb
## 69        doubleGainsAggregated   data.frame   41.6 Kb
## 70                      dpFiles    character  303.9 Kb
## 71                       dpPath    character 152 bytes
## 72                 dtrbetabinom     function    9.6 Kb
## 73                     dtrbinom     function      3 Kb
## 74                     dumpfile    character 120 bytes
## 75                            e       matrix    1.4 Kb
## 76                    effGenome      numeric  282.3 Kb
## 77                            f     function    1.7 Kb
## 78                      finalBB         list    3.5 Gb
## 79                  finalBBGray         list   68.3 Mb
## 80                finalClusters         list    2.8 Mb
## 81            finalClustersGray         list   77.7 Kb
## 82                    finalData   data.frame   10.1 Mb
## 83                 finalDrivers      VRanges    1.4 Mb
## 84        finalDriversAnnotated      VRanges    2.1 Mb
## 85               finalGenotypes        array  156.2 Mb
## 86              finalGenotypesP        array  104.2 Mb
## 87              finalGenotypesQ        array   21.1 Mb
## 88                     finalHom      numeric  282.3 Kb
## 89                   finalIndel         list      2 Gb
## 90               finalIndelGray         list  648.4 Mb
## 91                  finalPloidy      numeric  282.3 Kb
## 92                   finalPower         list  568.9 Kb
## 93                  finalPurity      numeric  282.3 Kb
## 94              finalPurityGray      numeric    7.8 Kb
## 95                     finalSnv         list   20.9 Gb
## 96                 finalSnvGray         list    1.7 Gb
## 97                      finalSv         list    2.9 Gb
## 98              findMainCluster     function   25.5 Kb
## 99                   first_time      logical  48 bytes
## 100                         fit      stanfit   62.9 Mb
## 101                   flattenBB     function   22.6 Kb
## 102                          fm      numeric    2.5 Kb
## 103                         fmq       matrix    3.1 Kb
## 104           fracGenomeWgdComp       matrix  478.5 Kb
## 105 fractionGenomeWgdCompatible     function   27.6 Kb
## 106                           g       matrix     59 Kb
## 107                 getAltCount     function   32.2 Kb
## 108                 getGenotype     function   18.1 Kb
## 109          getMutationCluster     function    6.9 Kb
## 110              getTumorCounts     function    7.1 Kb
## 111               getTumorDepth     function   20.5 Kb
## 112                    grayList      logical   10.9 Kb
## 113                          gu       matrix   33.9 Kb
## 114                  guessAccel    character    2.8 Kb
## 115                           h    histogram    2.2 Kb
## 116                          hh       matrix    3.7 Kb
## 117                    histBeta     function   29.4 Kb
## 118                           i      numeric  48 bytes
## 119                           I       matrix    1.2 Mb
## 120               isDeamination     function    2.7 Kb
## 121           isDeaminationNoUV     function    2.7 Kb
## 122                       isWgd      logical  271.5 Kb
## 123                           j      integer  48 bytes
## 124                           J       matrix    1.3 Mb
## 125                           l    character   16.7 Kb
## 126                     lineCol    character    4.6 Kb
## 127              loadAssignment     function    6.6 Kb
## 128                      loadBB     function    8.2 Kb
## 129                loadClusters     function    8.9 Kb
## 130                      loadCn     function     11 Kb
## 131       loadConsensusClusters     function    8.9 Kb
## 132            loadConsensusCNA     function   54.4 Kb
## 133               loadPositions     function    9.1 Kb
## 134                     loadVcf     function   26.7 Kb
## 135                           m      numeric  48 bytes
## 136                          ma      numeric      3 Kb
## 137                   makeTitle     function    7.1 Kb
## 138                matchDrivers     function     16 Kb
## 139                   mcnHeader     function   12.4 Kb
## 140               mergeClusters     function   22.6 Kb
## 141  mergeClustersByMutreadDiff     function   68.7 Kb
## 142                      my_png     function    6.6 Kb
## 143                           n    character  102.2 Mb
## 144                       na.rm     function    1.7 Kb
## 145                     nClones      integer  271.5 Kb
## 146                       nDeam      integer   73.1 Kb
## 147                     nDeam22      numeric   76.1 Kb
## 148                     nmSolve     function   35.5 Kb
## 149                        nSub      integer  271.5 Kb
## 150                        nWgd      integer      2 Kb
## 151                           o      integer 168 bytes
## 152                           p         list  152.6 Kb
## 153                 parseRegion     function   10.3 Kb
## 154                  pbetabinom     function    6.4 Kb
## 155            pClonalSubclonal       matrix  280.5 Kb
## 156                  pEarlyLate       matrix  217.9 Kb
## 157                 pGainToTime     function   25.4 Kb
## 158                          pi       matrix 232 bytes
## 159                    piToTime     function   93.1 Kb
## 160                      plotBB     function   92.2 Kb
## 161                   plotPoset     function    8.9 Kb
## 162                  plotSample     function   92.2 Kb
## 163                      plotSv     function   56.5 Kb
## 164                  plotTiming     function   74.7 Kb
## 165                     plotVcf     function   59.4 Kb
## 166                   posetDist     function   14.3 Kb
## 167              posteriorMutCN     function   17.5 Kb
## 168                       power     function    6.6 Kb
## 169             predictRealTime     function    8.1 Kb
## 170                        prgn    character 696 bytes
## 171                probGenotype     function   17.2 Kb
## 172            probGenotypeTail     function   16.1 Kb
## 173                ptrbetabinom     function    8.5 Kb
## 174                          pu       matrix   41.7 Kb
## 175                      purity      numeric  48 bytes
## 176                purityPloidy   data.frame  348.8 Kb
## 177                           q       matrix    2.5 Kb
## 178                          q1      numeric  282.3 Kb
## 179                          q5      numeric  282.3 Kb
## 180                qAccelRelWgd       matrix    3.4 Kb
## 181                     qPanCan      numeric 528 bytes
## 182                   qRateDeam       matrix    4.2 Kb
## 183                   qSubclone        array    9.9 Kb
## 184             qSubcloneLinear        array    9.9 Kb
## 185                        qWgd        array    7.8 Kb
## 186                           r      numeric    2.7 Kb
## 187                    rateDeam         list  289.1 Kb
## 188                    reduceBB     function     29 Kb
## 189      reduceToCoverRelations     function   41.4 Kb
## 190                     refFile    character 120 bytes
## 191                  refLengths      GRanges   21.4 Kb
## 192                      remove    character   69.7 Kb
## 193           removeSuperclones     function   23.5 Kb
## 194                         rho      numeric  48 bytes
## 195                           s    character 136 bytes
## 196                sample2donor    character  435.9 Kb
## 197                 sample2icgc    character  460.6 Kb
## 198                         sbs   data.frame   59.6 Kb
## 199             selectedSamples      logical   10.9 Kb
## 200                        set1    character 600 bytes
## 201                      sigCol       matrix    1.8 Kb
## 202           simulateMutations     function     56 Kb
## 203                specimenData   data.frame    2.3 Mb
## 204                   stackTime     function   30.2 Kb
## 205            subclonesTimeAbs         list  616.5 Kb
## 206      subclonesTimeAbsLinear         list  616.5 Kb
## 207        subclonesTimeAbsType         list  259.3 Kb
## 208  subclonesTimeAbsTypeLinear         list  259.3 Kb
## 209                           t   data.frame    1.8 Mb
## 210                       T.i.F       matrix  294.1 Kb
## 211                          t0      numeric   76.1 Kb
## 212                          t2      numeric  48 bytes
## 213                          t3      numeric  48 bytes
## 214                          ta     function   11.5 Kb
## 215                  testDriver     function    5.2 Kb
## 216                   testIndel     function    5.2 Kb
## 217                          tf      numeric    2.7 Kb
## 218                  timeToBeta     function   17.4 Kb
## 219                 timing_data       matrix    3.3 Mb
## 220                 timingClass       factor  272.2 Kb
## 221                  timingInfo   data.frame  556.3 Kb
## 222                         TiN      numeric    180 Kb
## 223                tissueBorder    character    3.1 Kb
## 224                   tissueCex      numeric      3 Kb
## 225                tissueColors    character    4.6 Kb
## 226                 tissueLines    character    4.6 Kb
## 227                   tissueLty      numeric      3 Kb
## 228                        tmax      numeric  48 bytes
## 229                        tmin      numeric  48 bytes
## 230                      tncLrt     function   17.8 Kb
## 231                     tncTime        array    4.3 Mb
## 232             tncToPyrimidine     function   24.4 Kb
## 233                     toGraph     function     11 Kb
## 234                         tpy      numeric  48 bytes
## 235               tryExceptNull     function      2 Kb
## 236                          tt       matrix  714.7 Kb
## 237                         tt0       matrix  304.2 Kb
## 238                         ttl     function   10.6 Kb
## 239                      typeNa    character 440 bytes
## 240              typesSubclones    character    2.2 Kb
## 241                           u    character  188.6 Kb
## 242               uniqueSamples      logical   10.9 Kb
## 243                           v      integer      2 Kb
## 244                         vcf CollapsedVCF   50.8 Mb
## 245                    vcfIndel CollapsedVCF   43.8 Mb
## 246                     vcfPath    character 136 bytes
## 247                        void      logical   80.1 Kb
## 248                          vv        table    2.6 Kb
## 249                           w   data.frame   71.2 Kb
## 250                         w22      numeric   76.1 Kb
## 251                 wccClusters         list    2.8 Mb
## 252                   wccPurity      numeric   21.7 Kb
## 253                    wccTable   data.frame  570.9 Kb
## 254          wemeClustersMerged         list    3.1 Mb
## 255               wgdCancerHist       matrix    5.8 Kb
## 256           wgdMrcaTimingData   data.frame    1.3 Mb
## 257                wgdParamDeam         list   49.5 Mb
## 258                     wgdPoss      logical  271.5 Kb
## 259                     wgdStar       factor  272.1 Kb
## 260                     wgdStat       factor    272 Kb
## 261                     wgdTest     function   14.5 Kb
## 262                  wgdTimeAbs         list  171.6 Kb
## 263              wgdTimeAbsType         list   86.2 Kb
## 264              wgdTimeDeamAcc        array   10.3 Mb
## 265                   whiteList      logical   10.9 Kb
## 266                    wnmSolve     function   40.2 Kb
## 267                          wu      logical     27 Kb
## 268                           x    character  96 bytes
## 269                          x0      numeric  48 bytes
## 270                          xx      numeric    2.7 Kb
## 271                           y      numeric    2.1 Kb
## 272                          y0      numeric    2.1 Kb
## 273                          y1      numeric    2.1 Kb
## 274                          yy      numeric    2.7 Kb

13.3 Packages

sessionInfo()
## R version 3.3.3 (2017-03-06)
## Platform: x86_64-redhat-linux-gnu (64-bit)
## Running under: Red Hat Enterprise Linux Server 7.3 (Maipo)
## 
## locale:
## [1] en_GB.UTF-8
## 
## attached base packages:
##  [1] splines   stats4    parallel  stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] rstan_2.17.3               StanHeaders_2.17.2         ggplot2_2.2.1              VGAM_1.0-3                
##  [5] VariantAnnotation_1.20.3   SummarizedExperiment_1.4.0 Biobase_2.34.0             Rsamtools_1.26.2          
##  [9] Biostrings_2.42.1          XVector_0.14.1             GenomicRanges_1.26.4       GenomeInfoDb_1.10.3       
## [13] IRanges_2.8.2              S4Vectors_0.12.2           BiocGenerics_0.20.0        knitr_1.20                
## [17] rj_2.0.5-2                
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.16             rj.gd_2.0.0-1            mvtnorm_1.0-7            lattice_0.20-34         
##  [5] rprojroot_1.3-2          digest_0.6.15            cellranger_1.1.0         plyr_1.8.4              
##  [9] nnls_1.4                 backports_1.1.2          RSQLite_2.1.0            evaluate_0.10.1         
## [13] pillar_1.2.1             zlibbioc_1.20.0          rlang_0.2.0              GenomicFeatures_1.26.4  
## [17] readxl_1.0.0             lazyeval_0.2.1           curl_3.2                 data.table_1.10.4-3     
## [21] car_3.0-0                blob_1.1.1               Matrix_1.2-8             rmarkdown_1.9           
## [25] BiocParallel_1.8.2       foreign_0.8-67           stringr_1.3.0            RCurl_1.95-4.10         
## [29] bit_1.1-12               biomaRt_2.30.0           munsell_0.4.3            rtracklayer_1.34.2      
## [33] htmltools_0.3.6          tibble_1.4.2             gridExtra_2.3            rio_0.5.10              
## [37] codetools_0.2-15         XML_3.98-1.10            GenomicAlignments_1.10.1 bitops_1.0-6            
## [41] grid_3.3.3               gtable_0.2.0             DBI_0.8                  magrittr_1.5            
## [45] scales_0.5.0             carData_3.0-1            stringi_1.1.7            mg14_0.0.5              
## [49] openxlsx_4.0.17          RColorBrewer_1.1-2       forcats_0.3.0            tools_3.3.3             
## [53] bit64_0.9-7              BSgenome_1.42.0          abind_1.4-5              yaml_2.1.18             
## [57] AnnotationDbi_1.36.2     inline_0.3.14            colorspace_1.3-2         memoise_1.1.0           
## [61] haven_1.1.1
devtools::session_info()
## Session info ----------------------------------------------------------------------------------------------------------
##  setting  value                       
##  version  R version 3.3.3 (2017-03-06)
##  system   x86_64, linux-gnu           
##  ui       X11                         
##  language (EN)                        
##  collate  en_GB.UTF-8                 
##  tz       Europe/London               
##  date     2018-07-31
## Packages --------------------------------------------------------------------------------------------------------------
##  package              * version   date       source                    
##  abind                  1.4-5     2016-07-21 CRAN (R 3.3.3)            
##  AnnotationDbi          1.36.2    2018-01-05 Bioconductor              
##  backports              1.1.2     2017-12-13 CRAN (R 3.3.3)            
##  base                 * 3.3.3     2017-03-08 local                     
##  Biobase              * 2.34.0    2018-01-05 Bioconductor              
##  BiocGenerics         * 0.20.0    2018-01-05 Bioconductor              
##  BiocParallel           1.8.2     2018-01-05 Bioconductor              
##  biomaRt                2.30.0    2018-01-05 Bioconductor              
##  Biostrings           * 2.42.1    2018-01-05 Bioconductor              
##  bit                    1.1-12    2014-04-09 CRAN (R 3.3.3)            
##  bit64                  0.9-7     2017-05-08 CRAN (R 3.3.3)            
##  bitops                 1.0-6     2013-08-17 CRAN (R 3.3.3)            
##  blob                   1.1.1     2018-03-25 CRAN (R 3.3.3)            
##  BSgenome               1.42.0    2018-01-05 Bioconductor              
##  car                    3.0-0     2018-04-02 CRAN (R 3.3.3)            
##  carData                3.0-1     2018-03-28 CRAN (R 3.3.3)            
##  cellranger             1.1.0     2016-07-27 CRAN (R 3.3.3)            
##  codetools              0.2-15    2016-10-05 CRAN (R 3.3.3)            
##  colorspace             1.3-2     2016-12-14 CRAN (R 3.3.3)            
##  curl                   3.2       2018-03-28 CRAN (R 3.3.3)            
##  data.table             1.10.4-3  2017-10-27 CRAN (R 3.3.3)            
##  datasets             * 3.3.3     2017-03-08 local                     
##  DBI                    0.8       2018-03-02 cran (@0.8)               
##  devtools               1.13.5    2018-02-18 CRAN (R 3.3.3)            
##  digest                 0.6.15    2018-01-28 CRAN (R 3.3.3)            
##  evaluate               0.10.1    2017-06-24 CRAN (R 3.3.3)            
##  forcats                0.3.0     2018-02-19 CRAN (R 3.3.3)            
##  foreign                0.8-67    2016-09-13 CRAN (R 3.3.3)            
##  GenomeInfoDb         * 1.10.3    2018-04-11 Bioconductor              
##  GenomicAlignments      1.10.1    2018-01-05 Bioconductor              
##  GenomicFeatures        1.26.4    2018-01-05 Bioconductor              
##  GenomicRanges        * 1.26.4    2018-04-11 Bioconductor              
##  ggplot2              * 2.2.1     2016-12-30 CRAN (R 3.3.3)            
##  graphics             * 3.3.3     2017-03-08 local                     
##  grDevices            * 3.3.3     2017-03-08 local                     
##  grid                   3.3.3     2017-03-08 local                     
##  gridExtra              2.3       2017-09-09 CRAN (R 3.3.3)            
##  gtable                 0.2.0     2016-02-26 CRAN (R 3.3.3)            
##  haven                  1.1.1     2018-01-18 CRAN (R 3.3.3)            
##  htmltools              0.3.6     2017-04-28 CRAN (R 3.3.3)            
##  inline                 0.3.14    2015-04-13 CRAN (R 3.3.3)            
##  IRanges              * 2.8.2     2018-04-11 Bioconductor              
##  knitr                * 1.20      2018-02-20 CRAN (R 3.3.3)            
##  lattice                0.20-34   2016-09-06 CRAN (R 3.3.3)            
##  lazyeval               0.2.1     2017-10-29 CRAN (R 3.3.3)            
##  magrittr               1.5       2014-11-22 CRAN (R 3.3.3)            
##  Matrix                 1.2-8     2017-01-20 CRAN (R 3.3.3)            
##  memoise                1.1.0     2017-04-21 CRAN (R 3.3.3)            
##  methods              * 3.3.3     2017-03-08 local                     
##  mg14                   0.0.5     2018-04-11 Github (mg14/mg14@6a63283)
##  munsell                0.4.3     2016-02-13 CRAN (R 3.3.3)            
##  mvtnorm                1.0-7     2018-01-26 CRAN (R 3.3.3)            
##  nnls                   1.4       2012-03-19 CRAN (R 3.3.3)            
##  openxlsx               4.0.17    2017-03-23 CRAN (R 3.3.3)            
##  parallel             * 3.3.3     2017-03-08 local                     
##  pillar                 1.2.1     2018-02-27 CRAN (R 3.3.3)            
##  plyr                   1.8.4     2016-06-08 CRAN (R 3.3.3)            
##  RColorBrewer           1.1-2     2014-12-07 CRAN (R 3.3.3)            
##  Rcpp                   0.12.16   2018-03-13 CRAN (R 3.3.3)            
##  RCurl                  1.95-4.10 2018-01-04 CRAN (R 3.3.3)            
##  readxl                 1.0.0     2017-04-18 CRAN (R 3.3.3)            
##  rio                    0.5.10    2018-03-29 CRAN (R 3.3.3)            
##  rj                   * 2.0.5-2   2018-04-10 local                     
##  rj.gd                  2.0.0-1   2018-04-10 local                     
##  rlang                  0.2.0     2018-02-20 CRAN (R 3.3.3)            
##  rmarkdown              1.9       2018-03-01 CRAN (R 3.3.3)            
##  rprojroot              1.3-2     2018-01-03 CRAN (R 3.3.3)            
##  Rsamtools            * 1.26.2    2018-01-05 Bioconductor              
##  RSQLite                2.1.0     2018-03-29 CRAN (R 3.3.3)            
##  rstan                * 2.17.3    2018-01-20 CRAN (R 3.3.3)            
##  rtracklayer            1.34.2    2018-01-05 Bioconductor              
##  S4Vectors            * 0.12.2    2018-04-11 Bioconductor              
##  scales                 0.5.0     2017-08-24 CRAN (R 3.3.3)            
##  splines              * 3.3.3     2017-03-08 local                     
##  StanHeaders          * 2.17.2    2018-01-20 CRAN (R 3.3.3)            
##  stats                * 3.3.3     2017-03-08 local                     
##  stats4               * 3.3.3     2017-03-08 local                     
##  stringi                1.1.7     2018-03-12 CRAN (R 3.3.3)            
##  stringr                1.3.0     2018-02-19 CRAN (R 3.3.3)            
##  SummarizedExperiment * 1.4.0     2018-01-05 Bioconductor              
##  tibble                 1.4.2     2018-01-22 CRAN (R 3.3.3)            
##  tools                  3.3.3     2017-03-08 local                     
##  utils                * 3.3.3     2017-03-08 local                     
##  VariantAnnotation    * 1.20.3    2018-04-11 Bioconductor              
##  VGAM                 * 1.0-3     2017-01-11 Github (cran/VGAM@4bdb529)
##  withr                  2.1.2     2018-03-15 CRAN (R 3.3.3)            
##  XML                    3.98-1.10 2018-02-19 CRAN (R 3.3.3)            
##  XVector              * 0.14.1    2018-04-11 Bioconductor              
##  yaml                   2.1.18    2018-03-08 CRAN (R 3.3.3)            
##  zlibbioc               1.20.0    2018-01-05 Bioconductor

14 Other code

All code is available at github.com/gerstung-lab/PCAWG-11

14.1 MutationTime.R

See https://github.com/gerstung-lab/MutationTime.R

#' # Calculation of mutation copy numbers and timing parameters
#' Minimal example
#' source("/Users/mg14/Projects/PCAWG-11/code/MutationTime.R")
#' vcf <- readVcf("final/final_consensus_12oct_passonly/snv_mnv/0040b1b6-b07a-4b6e-90ef-133523eaf412.consensus.20160830.somatic.snv_mnv.vcf.gz",genome="GRCh37")
#' bb <- loadBB("dp/20161213_vanloo_wedge_consSNV_prelimConsCNAallStar/4_copynumber/0040b1b6-b07a-4b6e-90ef-133523eaf412_segments.txt.gz")
#' clusters = read.table("dp/20161213_vanloo_wedge_consSNV_prelimConsCNAallStar/2_subclones/0040b1b6-b07a-4b6e-90ef-133523eaf412_subclonal_structure.txt.gz", header=TRUE, sep="\t")
#' purityPloidy <- read.table("dp/20161213_vanloo_wedge_consSNV_prelimConsCNAallStar/1_purity_ploidy/purity_ploidy.txt, header=TRUE, sep="\t")
#' purity <- purityPloidy[2,2]
#' MCN <- computeMutCn(vcf[1:1000], bb, clusters, purity)
#' # Check output
#' # Mutation Annotation
#' head(MCN$D)
#' # Classify as basic clonal states
#' table(classifyMutations(MCN$D))
#' # Timing parameters
#' MCN$P[[1]]
#' # Extract timing of segments
#' bb$timing_param <- MCN$P
#' bbToTime(bb)
#' PRE: Purity must be equal to the main clone, otherwise spurious results can be generated
#' PRE: CNV segments don't have to overlap, otherwise an error is generated: "Error in if (!mixFlag[j]) { : missing value where TRUE/FALSE needed"

require(VariantAnnotation)
require(VGAM)



#' Extract tumour depth
#' @param vcf 
#' @return 
#' 
#' @author mg14
#' @export
getTumorDepth <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count + info(vcf)$t_ref_count
    }else{ ## older data
        if("FAZ" %in% rownames(geno(header(vcf)))){
            rowSums(getTumorCounts(vcf))
        }else{
            geno(vcf)$DEP[,2]
        }
    }
}


#' Get alt alleles counts 
#' @param vcf 
#' @return 
#' 
#' @author mg14
#' @export
getAltCount <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count
    }else{ ## older formats
        if("FAZ" %in% rownames(geno(header(vcf)))){ ## ie subs
            c <- getTumorCounts(vcf)
            t <- c[,1:4] + c[,5:8]
            colnames(t) <- substring(colnames(t),2,2)
            a <- as.character(unlist(alt(vcf)))
            a[!a%in%c('A','T','C','G')] <- NA
            sapply(seq_along(a), function(i) if(is.na(a[i])) NA else t[i, a[i]])
        }
        else{ ## ie indel
            #(geno(vcf)$PP + geno(vcf)$NP + geno(vcf)$PB + geno(vcf)$NB)[,"TUMOUR"]
            geno(vcf)$MTR[,2]
        }
    }
}

dtrbinom <- function(x, size, prob, xmin=0) dbinom(x,size,prob) / pbinom(xmin-1, size, prob, lower.tail=FALSE)
pbetabinom <- function(x, size, prob, rho){
    if(rho!=0)
        VGAM::pbetabinom(x, size, prob, rho)
    else
        pbinom(x, size, prob)
}
dbetabinom <- function(x, size, prob, rho){
    if(rho!=0)
        VGAM::dbetabinom(x, size, prob, rho)
    else
        dbinom(x, size, prob)
}
dtrbetabinom <- function(x, size, prob, rho, xmin=0) {y <- dbetabinom(x,size,prob,rho) / (1-pbetabinom(xmin-1, size, prob, rho))
    y[x<xmin] <- 0
    return(y)}
ptrbetabinom <- function(x, size, prob, rho, xmin=0) {
    pmin <- pbetabinom(xmin-1, size, prob, rho)
    pmax(0,(pbetabinom(x,size,prob,rho) - pmin) / (1-pmin))}


mergeClusters <- function(clusters, deltaFreq=0.05){
    if(nrow(clusters) <= 1) return(clusters)
    h <- hclust(dist(clusters$proportion))
    ct <- cutree(h, h=deltaFreq)
    cp <- as.matrix(cophenetic(h))
    Reduce("rbind",lapply(unique(ct), function(i) {
                        n_ssms <- sum(clusters$n_ssms[ct==i])
                        w <- max(cp[ct==i,ct==i])
                        data.frame(new.cluster=i, n_ssms=n_ssms, proportion=sum(clusters$proportion[ct==i]*clusters$n_ssms[ct==i])/n_ssms, width=w)
                    }
            ))
}

#' Compute possible Mutation copy number states
#' @param bb Copy number with consensus annotation meta data
#' @param clusters 
#' @param purity 
#' @param gender 
#' @param isWgd 
#' @return list of length nrow(bb), can be added to mcols(bb)
#' 
#' @author mg14
#' @export
defineMcnStates <- function(bb, clusters, purity, gender='female', isWgd= FALSE){
    P <- vector(mode='list', length(bb))
    uniqueBB <- unique(bb)
    overlaps <- findOverlaps(uniqueBB, bb)
    
    majorCN <- split(bb$major_cn[subjectHits(overlaps)], queryHits(overlaps))
    m <- bb$minor_cn #hack: minor_cn > 0 in male samples - Battenberg bug?
    if(gender=='male')
        m[as.character(seqnames(bb)) %in% c('X','Y')] <- 0
    minorCN <- split(m[subjectHits(overlaps)], queryHits(overlaps)) 
    h <- selectHits(overlaps, "first")
    H <- selectHits(overlaps, "last")
    
    cnNormal <- 2 - (gender=='male' & seqnames(uniqueBB)=="X" | seqnames(uniqueBB)=="Y")
    
    # Fix cluster and purity discrepancies
    clusters$proportion[which.max(clusters$proportion)] <- purity
    
    cloneFreq <- split(bb$clonal_frequency[subjectHits(overlaps)], queryHits(overlaps))
    cnStates <- matrix(0, nrow=10000, ncol=6)
    colnames(cnStates) <- c("state","m","f","n.m.s","pi.m.s","s")
    
    power.c <- rep(0, nrow(clusters))
    
    deltaFreq <- 0.05 # merge clusters withing deltaFreq
    
    
    for( i in seq_along(uniqueBB)){
        if(!i %in% names(majorCN)) next
        majcni <- majorCN[[as.character(i)]]
        mincni <- minorCN[[as.character(i)]]
        cfi <- cloneFreq[[as.character(i)]]
        effCnTumor <- sum((majcni + mincni)*cfi)
        effCnNormal <- as.numeric(cnNormal[i]) * (1-purity)
        
        if(any(is.na(majcni))) next
        
        mixFlag <- FALSE
        subclonalGainFlag <- FALSE
        clonalFlag <- TRUE
        majdelta <- 0
        mindelta <- 0
        
        majanc <- majder <- majcni
        minanc <- minder <- mincni
        
        if(length(cfi)>1){ # multiple (subclonal) CN states, if so add clonal option (ie. mixture of both states), subclonal states only change by 1..delta(CN)
            d <- colSums(abs(rbind(majcni, mincni) - c(1,1) * (1+ isWgd)))
            derived <- d == max(d) ## derived state further from diploid/tetraploid
            if(all(derived)) next 
            majanc <- majcni[!derived]
            minanc <- mincni[!derived]
            majder <- majcni[derived]
            minder <- mincni[derived]
            majdelta <- majcni[derived] - majcni[!derived]
            mindelta <- mincni[derived] - mincni[!derived]
            majcni <- c(min(majcni), # clonal, sub on allele that doesn't change
                    (majcni[!derived] + cfi[derived]/purity*majdelta), # clonal, sub on allele that does change
                    (majcni[derived] >0) + (majdelta > 0)) # subclonal, subs after or before CNA, m=1,delta
            mincni <- c(min(mincni), (mincni[!derived] + cfi[derived]/purity*mindelta), (mincni[derived] >0) + (mindelta > 0))
            majdelta <- c(0, cfi[derived]/purity*majdelta, majdelta)
            mindelta <- c(0, cfi[derived]/purity*mindelta, mindelta)
            cfi <- c(purity, purity,  cfi[derived])
            mixFlag <- c(FALSE, TRUE, FALSE)
            clonalFlag <- c(TRUE,TRUE,FALSE)
            subclonalGainFlag <- c(FALSE, FALSE, TRUE)
        }
        
        
        a <- sapply(clusters$proportion, function(p) all(abs(p-cfi) > deltaFreq)) # subclone(s) not coinciding with CN change
        if(any(a)){ # assume subclones have derived from most abundant CN state
            majcni <- c(majcni, rep(majcni[which.max(cfi)]>0, sum(a))+0)
            mincni <- c(mincni, rep(mincni[which.max(cfi)]>0, sum(a))+0)
            cfi <- c(cfi, clusters$proportion[a])
            mixFlag <- c(mixFlag, rep(FALSE, sum(a)))
            clonalFlag <- c(clonalFlag, rep(FALSE, sum(a)))
            subclonalGainFlag <- c(subclonalGainFlag, rep(FALSE, sum(a)))
            majdelta <- c(majdelta, rep(0,sum(a)))
            mindelta <- c(mindelta, rep(0,sum(a)))
        }
        totcni <- majcni+mincni
        if(all(totcni==0)) next
        
        k <- 0
        for( j in seq_along(majcni)){
            if(majcni[j]==0 & mincni[j]==0) {
                f <- m <- 0 # allele frequency
                pi.m.s <- n.m.s <- 1
                l <- 1
            }else{
                l <- 1:max(majcni[j], mincni[j]) # mincni>majcni can occur if minor allele changes subclonally
                m <- l
                n.m.s <- rep(1, length(l)) #multiplicity of cn states
                if(!mixFlag[j]){ # single subclone, or no subclonal cn
                    f <- m * cfi[j] / (effCnTumor + effCnNormal)
                    if(mincni[j] > 0)
                        n.m.s[1:min(majcni[j], mincni[j])] <- 2
                    pi.m.s <- n.m.s/sum(n.m.s)
                }else{ # coexisting cn subclones, use mixture
                    d <- if(majdelta[j] != 0) majdelta[j] else mindelta[j] 
                    M <- max(mincni[j]*(mindelta[j]!=0), majcni[j]*(majdelta[j]!=0))
                    m <- (d > 0):M + (M-floor(M))
                    l <- seq_along(m)
                    f <- m *cfi[j] / (effCnTumor + effCnNormal) # Variant on major allele
                    n.m.s <- rep(1, length(l))
                    pi.m.s <- n.m.s/sum(n.m.s)
                }
            }
            cnStates[k + l,"state"]=j
            cnStates[k + l,"m"]=m
            cnStates[k + l,"f"]=f
            cnStates[k + l,"pi.m.s"]=pi.m.s
            cnStates[k + l,"n.m.s"]=n.m.s
            k <- k + length(l)
        }
        whichStates <- (1:k)[cnStates[1:k,"f"]>0]
        
        # State probabilities - based on cell fractions
        cfi.s <- unique(cfi)
        pi.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, clusters$n_ssms[which.min(abs(clusters$proportion - p))], 1))
        pi.s <- pi.s/sum(pi.s)
        
        c.to.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, which.min(abs(clusters$proportion - p)), NA)) # map to cluster
        s.to.c <- sapply(clusters$proportion, function(c) which.min(abs(cfi.s - c)))
        
        cnStates[1:k,"s"] = as.numeric(factor(cfi, levels=cfi.s))[cnStates[1:k,"state"]]
        
        timing_param <- cbind(cnStates[whichStates,,drop=FALSE], cfi=cfi[cnStates[whichStates,"state"]], pi.s=pi.s[cnStates[whichStates,"s"]], P.m.sX=NA,P.m.sX.lo=NA, P.m.sX.up=NA, T.m.sX=NA, T.m.sX.lo=NA, T.m.sX.up=NA, power.s=NA, power.m.s = NA,
                majCN=majcni[cnStates[whichStates,"state"]], minCN=mincni[cnStates[whichStates,"state"]], 
                majDelta = majdelta[cnStates[whichStates,"state"]], minDelta = mindelta[cnStates[whichStates,"state"]], 
                clonalFlag=clonalFlag[cnStates[whichStates,"state"]], subclonalGainFlag=subclonalGainFlag[cnStates[whichStates,"state"]], mixFlag=mixFlag[cnStates[whichStates,"state"]], majCNanc=majanc, minCNanc=minanc, majCNder=majder, minCNder=minder)
        P[[h[i]]] <- timing_param
        if(H[i] != h[i]) P[[H[[i]]]] <- P[[h[i]]]
        
    }
    return(P)
} 


#' Compute Mutation copy numbers
#' @param vcf A vcf object of ssnms. See VariantAnnotation::readVcf()
#' @param bb The copy number as a GRanges() object, meta data in consensus format. See loadBB()
#' @param clusters A data.frame with the cluster proportion and n_ssms
#' @param purity The purity of the samples
#' @param gender 'male' or 'female'
#' @param isWgd TRUE/FALSE 
#' @param xmin min read support. Needed for power calculations
#' @param rho Dispersion parameter
#' @return A list with elements (D: Annotated Data.Frame, can be added to vcf object; P: Timing parameters to be added to CN Ranges; power.c power of each cluster).
#' 
#' @author mg14
#' @export
computeMutCn <- function(vcf, bb, clusters, purity, gender='female', isWgd= FALSE, xmin=3, rho=0, n.boot=200){
    n <- nrow(vcf)
    D <- DataFrame(MutCN=rep(NA,n), MutDeltaCN=rep(NA,n), MajCN=rep(NA,n), MinCN=rep(NA,n), MajDerCN=rep(NA,n), MinDerCN=rep(NA,n), CNF=rep(NA,n), CNID =as(vector("list", n),"List"), pMutCN=rep(NA,n), pGain=rep(NA,n),pSingle=rep(NA,n),pSub=rep(NA,n), pMutCNTail=rep(NA,n))    
    P <- defineMcnStates(bb,clusters, purity, gender, isWgd)
    if(n==0)
        return(list(D=D, P=P))
    
    altCount <- getAltCount(vcf)
    tumDepth <- getTumorDepth(vcf)
    names(altCount) <- names(tumDepth) <- NULL
    
    # Match VCF and CN
    overlaps <- findOverlaps(vcf, bb)
    D[["CNID"]] <- as(overlaps, "List")
    majorCN <- split(bb$major_cn[subjectHits(overlaps)], queryHits(overlaps))
    m <- bb$minor_cn #hack: minor_cn > 0 in male samples - Battenberg bug?
    if(gender=='male')
        m[as.character(seqnames(bb)) %in% c('X','Y')] <- 0
    minorCN <- split(m[subjectHits(overlaps)], queryHits(overlaps)) 
    h <- selectHits(overlaps, "first")
    H <- selectHits(overlaps, "last")
    
    cnNormal <- 2 - (gender=='male' & seqnames(vcf)=="X" | seqnames(vcf)=="Y")
    
    # Fix cluster and purity discrepancies
    clusters$proportion[which.max(clusters$proportion)] <- purity
    
    cloneFreq <- split(bb$clonal_frequency[subjectHits(overlaps)], queryHits(overlaps))
    
    power.c <- rep(0, nrow(clusters))
    
    deltaFreq <- 0.05 # merge clusters withing deltaFreq
    
    boundaryHits <- countOverlaps(vcf, unique(bb)) > 1 # indels overlapping with CN boundaries
    
    for(globalIt in 1:2){ # 2 iterations, fist local (ie per segment) fit, then global
        for( i in which( (diff(c(-1, h)) !=0 | is.na(diff(c(-1, h)) !=0) ) & ! boundaryHits )){
            if(!i %in% names(majorCN)) next
            if(is.na(h[i])) next
            if(if(i>1) h[i] != h[i-1] | is.na(h[i-1]) else TRUE){ #ie. new segment
                
                hh <- which(h==h[i] & !is.na(altCount) &! is.na(tumDepth))
                if(length(hh)==0) next
                
                if(is.null(bb$timing_param[[h[i]]])){
                    cnStates <- P[[h[i]]]
                    if(is.null(cnStates)) next
                    whichStates <- 1:nrow(cnStates)
                    
                    # State probabilities - based on cell fractions
                    cfi.s <- unique(cnStates[,"cfi"])
                    pi.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, clusters$n_ssms[which.min(abs(clusters$proportion - p))], 1))
                    pi.s <- pi.s/sum(pi.s)
                    
                    c.to.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, which.min(abs(clusters$proportion - p)), NA)) # map to cluster
                    s.to.c <- sapply(clusters$proportion, function(c) which.min(abs(cfi.s - c)))
                    
                    
                    # Likelihood
                    L <- matrix(sapply(pmin(cnStates[whichStates,"f"],1), function(pp) dtrbetabinom(altCount[hh],tumDepth[hh],pp, rho=rho, xmin=pmin(altCount[hh],0)) + .Machine$double.eps), ncol=length(whichStates))
                    
                    # Power
                    power.sm <- colMeans(matrix(sapply(pmin(cnStates[whichStates,"f"],1), function(pp) 1-ptrbetabinom(pmin(altCount[hh],xmin-1),tumDepth[hh],pp, rho=rho, xmin=0)), ncol=length(whichStates)), na.rm=TRUE)
                    if(globalIt==2){
                        P.m.sX <- P[[h[i]]][,"P.m.sX"]
                        power.s <- sapply(split(power.sm * P.m.sX, cnStates[whichStates,"s"]), sum) # Power for state
                        power.s[!is.na(c.to.s)] <- power.c[na.omit(c.to.s)]
                        power.m.s <- power.sm # Relative power of m states (local) conditioned on s (global).
                        for(s in unique(cnStates[whichStates,"s"])) power.m.s[cnStates[whichStates,"s"]==s] <- power.m.s[cnStates[whichStates,"s"]==s] / max(power.m.s[cnStates[whichStates,"s"]==s]) #power.s[s]
                    }else{ # First iteration
                        power.m.s <- power.sm
                        power.s <- rep(1,length(whichStates))
                    }
                    
                    mm <- function(x) {
                        x <- factor(x)
                        if(nlevels(x) > 1) t(model.matrix( ~ x + 0)) else matrix(1, ncol=length(x))
                    }
                    
                    # EM algorithm (mixture fitting) for pi
                    P.m.sX <- cnStates[whichStates,"pi.m.s"]
                    s.from.m <- mm(cnStates[whichStates,"s"]) # indicator matrix to map
                    for(em.it in 1:100){
                        P.xsm <- L * rep(pi.s[cnStates[whichStates,"s"]] * P.m.sX / power.m.s / power.s[cnStates[whichStates,"s"]], each=nrow(L)) # P(X,s,m)
                        P.sm.x <- P.xsm/rowSums(P.xsm) # P(s,m|Xi)
                        P.sm.X <- pmax(.Machine$double.xmin,colMeans(P.sm.x)) # P(s,m|X) / piState[cnStates[1:k,"state"]] / cnStates[1:k,"pi.m.s"]
                        if(em.it==100) break
                        P.s.X <- s.from.m %*% P.sm.X 
                        P.m.sX <- P.sm.X / P.s.X[cnStates[whichStates,"s"]]
                    }
                    
                    toTime <- function(cnStates, P.m.sX, s.m) {
                        mAnc <- cnStates[,"m"] - cnStates[,"minDelta"] - cnStates[,"majDelta"]
                        mAnc.s <- factor(paste(mAnc, cnStates[,"s"], sep="."))
                        n <- (mAnc <= cnStates[,"majCNanc"]) + (mAnc <= cnStates[,"minCNanc"] )
                        mAnc.s.from.m <- mm(x = mAnc.s)# indicator matrix to map
                        return((mAnc.s.from.m[mAnc.s,] %*% P.m.sX) / (s.m[cnStates[,"s"],] %*% (P.m.sX * mAnc)) *  (cnStates[,"majCNanc"] + cnStates[,"minCNanc"]) / n)
                    }
                    
                    T.m.sX <- toTime(cnStates, P.m.sX, s.from.m) 
                    
                    if(globalIt==1){
                        p <- (sapply(split(power.sm * P.m.sX, cnStates[whichStates,"s"]), sum) * nrow(L))[s.to.c]
                        if(!any(is.na(p) | is.nan(p)))
                            power.c <- power.c + p 
                    }
                    
                    # Bootstrapping for CIs
                    if(globalIt==2){
                        b.m.sX <- if(n.boot>0) sapply(1:n.boot, function(foo){
                                                L <- rbind(L, rep(1e-3, each=ncol(L))) #add an uniformative row
                                                L <- L[sample(1:nrow(L), replace=TRUE),,drop=FALSE]
                                                P.m.sX <- cnStates[whichStates,"pi.m.s"]
                                                for(em.it in 1:50){
                                                    P.xsm <- L * rep(pi.s[cnStates[whichStates,"s"]] * P.m.sX / power.m.s / power.s[cnStates[whichStates,"s"]], each=nrow(L)) # P(X,s,m)
                                                    P.sm.x <- P.xsm/rowSums(P.xsm) # P(s,m|Xi)
                                                    P.sm.X <- colMeans(P.sm.x) # P(s,m|X) / piState[cnStates[1:k,"state"]] / cnStates[1:k,"pi.m.s"]
                                                    P.s.X <- s.from.m %*% P.sm.X 
                                                    P.m.sX <- P.sm.X / P.s.X[cnStates[whichStates,"s"]]
                                                }
                                                return(P.m.sX)
                                            }) else NA
                        if(n.boot>0) try({
                                        CI.m.sX <- apply(b.m.sX, 1, quantile, c(0.025, 0.975))
                                        cnStates[,"P.m.sX.lo"] <- CI.m.sX[1,] 
                                        cnStates[,"P.m.sX.up"] <- CI.m.sX[2,]
                                        B.m.sX <- toTime(cnStates = cnStates, P.m.sX = b.m.sX, s.m = s.from.m)
                                        C.m.sX <- apply(B.m.sX, 1, quantile, c(0.025, 0.975))
                                        cnStates[,"T.m.sX.lo"] <- C.m.sX[1,] 
                                        cnStates[,"T.m.sX.up"] <- C.m.sX[2,]
                                    }, silent=TRUE)
                    }
                    
                    P.sm.x[apply(is.na(P.sm.x)|is.nan(P.sm.x),1,any),] <- NA
                    cnStates[,"P.m.sX"] <- P.m.sX
                    cnStates[,"T.m.sX"] <- T.m.sX
                    cnStates[,"power.s"] <- power.s[cnStates[whichStates,"s"]]
                    cnStates[,"power.m.s"] <- power.m.s
                    
                }else{
                    cnStates <- bb$timing_param[[h[i]]]
                    if(is.null(cnStates)) next
                    P.sm.x <- posteriorMutCN(x=altCount[hh],n=tumDepth[hh], cnStates=cnStates, xmin=0, rho=rho)
                }
                
                # Tail probs
                pMutCNTail <- matrix(sapply(pmin(cnStates[,"f"],1), function(pp) ptrbetabinom(altCount[hh],tumDepth[hh],pp, rho=rho, xmin=pmin(altCount[hh],xmin))), ncol=nrow(cnStates)) #%*% c(pi.s[cnStates[whichStates,"state"]] * P.m.sX)              
                
                P[[h[i]]] <- cnStates
                if(H[i] != h[i]) P[[H[[i]]]] <- P[[h[i]]]
                
                w <- apply(P.sm.x, 1, function(x) if(any(is.na(x))) NA else which.max(x) )
                if(all(is.na(w))) next
                
                D[hh, "pSub"] <- rowSums(P.sm.x[, !cnStates[,"clonalFlag"], drop=FALSE])
                D[hh, "pGain"] <- rowSums(P.sm.x[, cnStates[,"clonalFlag"] & cnStates[,"m"] > 1.00001 + cnStates[,"majDelta"] + cnStates[,"minDelta"], drop=FALSE])
                #D[hh, "pSingle"] <- rowSums(P.sm.x[, cnStates[1:k,"state"] %in% which(clonalFlag) & cnStates[1:k,"m"]<=1, drop=FALSE])
                D[hh, "pSingle"] <-  1 - D[hh, "pSub"] - D[hh, "pGain"]         
                
                D[hh,"MutCN"]  <- cnStates[w,"m"]
                D[hh,"MutDeltaCN"]  <- cnStates[w,"majDelta"] + cnStates[w,"minDelta"]
                D[hh,"MinCN"] <- cnStates[w,"minCNanc"]
                D[hh,"MajCN"] <- cnStates[w,"majCNanc"]
                D[hh,"MinDerCN"] <- cnStates[w,"minCNder"]
                D[hh,"MajDerCN"] <- cnStates[w,"majCNder"]
                
                D[hh,"CNF"]  <- cnStates[w,"cfi"]
                D[hh,"pMutCN"] <- sapply(seq_along(w), function(i) P.sm.x[i,w[i]])
                D[hh,"pMutCNTail"] <- sapply(seq_along(w), function(i) pMutCNTail[i,w[i]])
            }       
        }
        if(globalIt==1){
            power.c <- power.c / sum(!is.na(D[,"pSub"]))
            if(any(is.na(power.c) | power.c==0)) {
                break # Cancel 2nd iteration
                warning("Power calculation yielded NA, aborting.")
            }
            if(any(power.c > 1)) {
                warning("Calculated power > 1, rounding down.")
                power.c <- pmin(1, power.c)
            }
        }
    }
    return(list(D=D,P=P, power.c=power.c))
}

mcnHeader <- function() {
    DataFrame(Number=c(1,1,1,1,1,1,1,1,".",1,1,1,1),Type=c("Float","Float","Integer","Integer","Integer","Integer","Float","Float","Integer","Float","Float","Float","Float"), 
            Description=c("Mutation copy number","Change in MutCN between ancestral and derived state","Major copy number (ancestral)","Minor copy number (ancestral)","Major copy number (derived)","Minor copy number (derived)","Copy number frequency (relative to all cancer cells)", "MutCN probability","BB segment ids","Posterior prob: Early clonal","Posterior prob: Late clonal","Posterior prob: Subclonal", "Tail prob of mixture model"),
            row.names=c("MutCN","MutDeltaCN","MajCN","MinCN","MajDerCN","MinDerCN","CNF","pMutCN","CNID","pGain","pSingle","pSub", "pMutCNTail"))
}

addMutCn <- function(vcf, bb=allBB[[meta(header(vcf))["ID",]]], clusters=allClusters[[meta(header(vcf))["ID",]]]){
    i = info(header(vcf))
    info(header(vcf)) <- rbind(i, mcnHeader())
    info(vcf) <- cbind(info(vcf), computeMutCn(vcf, bb, clusters)$D)
    return(vcf)
}

classifyMutations <- function(x, reclassify=c("missing","all","none")) {
    reclassify <- match.arg(reclassify)
    if(nrow(x) ==0 )
        return(factor(NULL, levels=c("clonal [early]", "clonal [late]", "clonal [NA]", "subclonal")))
    if(class(x)=="CollapsedVCF")
    x <- info(x)
    .clsfy <- function(x) {
        cls <- x$CLS
        if(reclassify %in% c("missing", "none") &! is.null(cls)){
            if(all(unique(cls) %in% c("early", "late", "clonal", "subclonal")))
                cls <- factor(cls, levels=c("early", "late", "clonal", "subclonal"), labels=c("clonal [early]", "clonal [late]", "clonal [NA]", "subclonal"))
            cls <- as.character(cls)
            cls[cls=="NA"] <- NA
            if(reclassify=="missing" & any(is.na(cls)))
                cls[is.na(cls)] <- paste(factor(apply(as.matrix(x[is.na(cls), c("pGain","pSingle","pSub")]), 1, function(x) if(all(is.na(x))) NA else which.max(x)), levels=1:3, labels=c("clonal [early]", "clonal [late]","subclonal"))) ## reclassify missing
        }else{
            cls <- paste(factor(apply(as.matrix(x[, c("pGain","pSingle","pSub")]), 1, function(x) if(all(is.na(x))) NA else which.max(x)), levels=1:3, labels=c("clonal [early]", "clonal [late]","subclonal"))) ## reclassify missing
            
        }
        cls[x$pGain==0 & cls!="subclonal"] <- "clonal [NA]"
        if(!is.null(x$MajCN))
            cls[cls!="subclonal" & (x$MajCN == 1 | x$MinCN == 1) & abs(x$MutCN - x$MutDeltaCN -1) <= 0.0001] <- "clonal [NA]"
        cls <- factor(cls, levels=c("clonal [early]", "clonal [late]", "clonal [NA]", "subclonal"))
    }
    cls <- .clsfy(x)
    return(cls)
}

posteriorMutCN <- function(x,n, cnStates, xmin=3, rho=0.01){
    whichStates <- 1:nrow(cnStates)
    L <- matrix(sapply(pmin(cnStates[whichStates,"f"],1), function(pp) dtrbetabinom(x,n,pp, rho=rho, xmin=pmin(x,xmin)) + .Machine$double.eps), ncol=length(whichStates))
    P.xsm <- L * rep(cnStates[whichStates,"pi.s"] * cnStates[whichStates,"P.m.sX"] / cnStates[whichStates,"power.s"] / cnStates[whichStates,"power.m.s"], each=nrow(L)) # P(X,s,m)
    P.sm.x <- P.xsm/rowSums(P.xsm) # P(s,m|Xi)
    return(P.sm.x)
}


loadBB <- function(file){
    tab <- read.table(file, header=TRUE, sep='\t')
    GRanges(tab$chromosome, IRanges(tab$start, tab$end), strand="*", tab[-3:-1])
}

pGainToTime <- function(vcf){
    P <- matrix(NA, nrow=nrow(vcf), ncol=4, dimnames=list(NULL, c("pEarly","pLate","pClonal[NA]","pSub")))
    P[,c("pEarly","pClonal[NA]","pSub")] <- as.matrix(info(vcf)[,c("pGain","pSingle","pSub")])
    biAllelicGain <- (info(vcf)$MajCN > 1 & (info(vcf)$MinCN > 1 | info(vcf)$MinCN == 0) & ! ((info(vcf)$MajCN == 1 | info(vcf)$MinCN == 1) & abs(info(vcf)$MutCN - info(vcf)$MutDeltaCN -1) <= 0.0001))
    w <- which(biAllelicGain)
    P[w, "pLate"] <- P[w, "pClonal[NA]"]
    P[w, "pClonal[NA]"] <- 0
    P[which(!biAllelicGain),"pLate"] <- 0
    return(P)
}

piToTime <- function(timing_param, type=c("Mono-allelic Gain","CN-LOH", "Bi-allelic Gain (WGD)")){
    type <- match.arg(type)
    evo <- NA
    w <- timing_param[,"s"]==1 &! timing_param[,"mixFlag"] ## Clonal states, not mixture (CN subclonal)
    M <- sum(w) ## Max multiplicity = Major copy number
    m <- sum(w & timing_param[,"n.m.s"]==2) ## Minor CN
    #evo <- paste0("1:1", paste0(2,":",m), if(M>2) paste0(3,":",) else "", collapse="->")
    t <- timing_param[(M:(M-1)),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE] ## Timing M and M-1
    if(nrow(t)==1) t <- rbind(t, NA)
    if(!any(is.na(t))){
        if(M==4) {
            if(timing_param[M-1,"P.m.sX"] < 0.02){ ## No MCN 3
                if(type=="CN-LOH"){ ## Hotfix for 4+0, treated at 1:1 -> 2:0 -> 4:0
                    t <- timing_param[c(M,M-2),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE]*c(1,0.5) ## Timing M and M-2
                    evo <- "1:1->2:0->4:0"
                }
                else if(type=="Bi-allelic Gain (WGD)"){         
                    if(m==2) {## Hotfix for 4+2 regions, treated at 1:1 -> 2:1 -> 4:2
                        t <- timing_param[c(M,M-2),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE] ## Timing M and M-2
                        t[2,] <- pmax(0,2*t[2,] - t[1,])/3
                        evo <- "1:1->2:1->4:2"
                    } else if(m==4) {## Hotfix for 4+4 regions, treated at 1:1 -> 2:2 -> 4:4
                        t <- timing_param[c(M,M-2),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE]*c(1,0.5) ## Timing M and M-2
                        evo <- "1:1->2:2->4:4"
                    }
                }           
            } else if(type=="Bi-allelic Gain (WGD)"){ ## Can't uniquely time second event
                t[2,] <- NA
            } 
            if(m==3) {
                t[2,] <- NA ## Don'time secondary 4+3 for now, needs more work
            } 
        } else {
            if(M==3 & type=="Bi-allelic Gain (WGD)") {## Hotfix for 3+2 regions, treated at 1:1 -> 2:2 -> 3:2
                t[2,] <- pmax(0,2*t[2,] - t[1,])
                evo <- "1:1->2:2->3:2"
            }
        }
    }
    colnames(t) <- c("","lo","up")
    t[,2] <- pmin(t[,1],t[,2])
    t[,3] <- pmax(t[,1],t[,3])
    t <- pmin(apply(t,2,cumsum),1) ## Times are actually deltas
    if(M < 3) t[2,] <- NA
    t[is.infinite(t)] <- NA
    rownames(t) <- c("",".2nd")
    return(c(t[1,],`.2nd`=t[2,])) ## Linearise
}

bbToTime <- function(bb, timing_param = bb$timing_param, pseudo.count=5){
    sub <- duplicated(bb) 
    covrg <- countQueryHits(findOverlaps(bb, bb)) 
    maj <- sapply(timing_param, function(x) if(length(x) > 0) x[1, "majCNanc"] else NA) #bb$major_cn
    min <- sapply(timing_param, function(x) if(length(x) > 0) x[1, "minCNanc"] else NA) #bb$minor_cn
    type <- sapply(seq_along(bb), function(i){
                if(maj[i] < 2 | is.na(maj[i]) | sub[i] | (maj[i] > 4 & min[i] >= 2)) return(NA)
                type <- if(min[i]==1){ "Mono-allelic Gain" 
                        }else if(min[i]==0){"CN-LOH"}
                        else "Bi-allelic Gain (WGD)"
                return(type)
            })
    time <- t(sapply(seq_along(bb), function(i){
                        if(sub[i] | is.na(type[i])) return(rep(NA,6)) 
                        else piToTime(timing_param[[i]],type[i])
                    }))
    
    res <- data.frame(type=factor(type, levels=c("Mono-allelic Gain","CN-LOH","Bi-allelic Gain (WGD)")), time=time)
    colnames(res) <- c("type","time","time.lo","time.up","time.2nd","time.2nd.lo","time.2nd.up")
    
    # posthoc adjustment of CI's
    res$time.up <- (pseudo.count + bb$n.snv_mnv * res$time.up)/(pseudo.count + bb$n.snv_mnv)
    res$time.lo <- (0 + bb$n.snv_mnv * res$time.lo)/(pseudo.count + bb$n.snv_mnv)
    res$time.2nd.up <- (pseudo.count + bb$n.snv_mnv * res$time.2nd.up)/(pseudo.count + bb$n.snv_mnv)
    res$time.2nd.lo <- (0 + bb$n.snv_mnv * res$time.2nd.lo)/(pseudo.count + bb$n.snv_mnv)
    
    res$time.star <- factor((covrg == 1) + (min < 2 & maj <= 2 | min==2 & maj==2) * (covrg == 1), levels=0:2, labels = c("*","**","***")) ## ***: 2+0, 2+1, 2+2; **: 2<n+1, {3,4}+2; *: subclonal gains
    res$time.star[is.na(res$time)] <- NA
    return(res)
}

simulateMutations <- function(bb, purity=max(bb$clonal_frequency, na.rm=TRUE),  n=40, rho=0.01, xmin=3){
    g <- (averagePloidy(bb)*purity + 2*(1-purity))
    V <- list(VRanges())#VRanges()
    for(i in which(!duplicated(bb)))
        if(bb$n.snv_mnv[i]>1 & !is.null( bb$timing_param[[i]]))try({
                        cnStates <- bb$timing_param[[i]]
                        p <- cnStates[,"pi.s"]* if(!any(is.na(cnStates[,"P.m.sX"]))) cnStates[,"P.m.sX"] else cnStates[,"pi.m.s"]
                        pwr <- cnStates[,"power.m.s"]#(cnStates[,"power.s"] * cnStates[,"power.m.s"])
                        s <- sample(1:nrow(cnStates), size=pmax(1,ceiling(bb$n.snv_mnv[i] * (p %*% (1/pwr)))), prob=p, replace=TRUE)
                        f <- cnStates[s,"f"]
                        mu.c <- (bb$total_cn[i]*purity + 2*(1-purity))/g * n
                        c <- rnbinom(length(f), size=1/rho, mu=mu.c)
                        x <- rbetabinom(n=length(f), size=c, prob=f, rho=rho)
                        pos <- round(runif(length(f), min=start(bb)[i], max=end(bb)[i]))
                        w <- which(x>=xmin)
                        V[[i]] <- VRanges(seqnames=seqnames(bb)[i], IRanges(pos, width=1), ref="N", alt="A", totalDepth=c, altDepth=x)[w]
                    })
    V <- do.call("c", V[!sapply(V, is.null)])
    sampleNames(V) <- "SAMPLE"
    v <- as(V, "VCF")
    info(header(v)) <- rbind(info(header(v)),info(header(finalSnv[[1]]))[c("t_ref_count","t_alt_count"),])
    info(v)$t_alt_count <- altDepth(V)
    info(v)$t_ref_count <- totalDepth(V) - altDepth(V)
    return(v)
}

14.2 PCAWG-functions.R

All basic functions

# TODO: Add comment
# 
# Author: mg14
###############################################################################

library(Rsamtools)
library(VariantAnnotation)

vcfPath <- '../final/final_consensus_12oct_passonly/snv_mnv'
basePath <-  '../dp/20170129_dpclust_finalConsensusCopynum_levels_a_b_c_d'
dpPath <- paste0('../final/consensus_subclonal_reconstruction_20170325')
#CANCERGENES <- read.table('../ref/cancer_genes.txt')$V1
purityPloidy <- read.table( '../final/consensus.20170218.purity.ploidy.txt', header=TRUE, row.names=1)
#colnames(purityPloidy) <- c("purity","ploidy")
cnPath <- paste0(basePath,'/4_copynumber/')
bbPath <- paste0(basePath,'/4_copynumber/')

allGender <- read.table('../final/2016_12_09_inferred_sex_all_samples.txt', header=TRUE, sep='\t')
allGender <- allGender[!duplicated(allGender$tumourid) & allGender$tumourid != 'tumourid',]
#write.table(gender,'../gender/2016_12_09_inferred_sex_all_samples_CORRECTED_MG.txt', row.names=FALSE, col.names=TRUE, sep='\t', quote=FALSE)
rownames(allGender) <- allGender$tumourid

addTNC <- function(vcf){    
    r = "../ref/genome.fa.gz" #meta(header(v))["reference",]
    if(!"TNC" %in% rownames(header(vcf)@header$INFO)){
        tnc=scanFa(file=r, resize(granges(vcf), 3,fix="center"))
        i = header(vcf)@header$INFO
        info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Trinucleotide context", row.names="TNC"))
        info(vcf)$TNC <- as.character(tnc)
    }
    return(vcf)
}

dpFiles <- dir(dpPath, pattern="_subclonal_structure.txt", recursive=TRUE)
    
bbFiles <- dir(bbPath, pattern="_segments.txt", recursive=TRUE)

wccTable <- read.table("../final/wcc_consensus_values_9_12.tsv", header=TRUE, sep='\t')
d <- data.frame(cluster=wccTable$sc_n, n_ssms=wccTable$consensus_mutation_number, proportion = round(wccTable$consensus_cluster_cp,3))
d[d$cluster==1,"proportion"] <- wccTable[d$cluster==1,"purity"]
wccClusters <- split(d, wccTable$sid)
wccPurity <- d[d$cluster==1,"proportion"] 
#plot(wccPurity, purityPloidy[,"purity"])

loadClusters <- function(ID){
    file <- paste0(dpPath,"/",grep(paste0(ID,"[[:punct:]]"), dpFiles, value=TRUE, perl=TRUE))
    if(grepl(".gz", file))
        file <- gzfile(file)
    read.table(file, header=TRUE, sep="\t")
}

loadConsensusClusters <- function(ID){
    file <- paste0(dpPath,"/",grep(paste0(ID,"[[:punct:]]"), dpFiles, value=TRUE, perl=TRUE))
    if(grepl(".gz", file))
        file <- gzfile(file)
    read.table(file, header=TRUE, sep="\t")
}

consensusClustersToOld <- function(clusters){
    data.frame(cluster=clusters$cluster, n_ssms=clusters$n_snvs, proportion=clusters$fraction_total_cells)
}

parseRegion <- function(regions){
    chr <- regmatches(regions, regexpr("^.+(?=:)",regions,perl=TRUE))
    start <- as.numeric(regmatches(regions, regexpr("(?<=:)[0-9]+(?=-)",regions,perl=TRUE)))
    end <- as.numeric(regmatches(regions, regexpr("(?<=-)[0-9]+$",regions,perl=TRUE)))
    data.frame(chr,start,end)
}

loadCn <- function(ID){
    file <- paste0(cnPath, "/",ID,"_timingsMle.txt")
    tab <- read.table(file, header=TRUE, sep=" ")
    reg <- parseRegion(tab$ascatId)
    GRanges(tab$chr, IRanges(reg$start,reg$end), strand="*", tab[-1])
}

loadBB <- function(ID){
    t <- try({
                file <- grep(paste0(ID,"[[:punct:]]"), dir(bbPath, pattern="segments.txt", recursive=TRUE, full.names=TRUE), value=TRUE)
                if(grepl(".gz", file))
                    file <- gzfile(file)
                tab <- read.table(file, header=TRUE, sep='\t')
                GRanges(tab$chromosome, IRanges(tab$start, tab$end), strand="*", tab[-3:-1])
            })
    if(class(t)=='try-error') GRanges(copy_number=numeric(), major_cn=numeric(), minor_cn=numeric(), clonal_frequency=numeric()) else t
}

loadConsensusCNA <- function(ID, purity=1, path="../final/consensus.20170119.somatic.cna.annotated"){
    file <- grep(paste0(ID,"[[:punct:]]"), dir(path, pattern="cna.annotated.txt", recursive=TRUE, full.names=TRUE), value=TRUE)
    if(grepl(".gz", file))
        file <- gzfile(file)
    tab <- read.table(file, header=TRUE, sep='\t')
    subclonalIndex <- !is.na(tab$total_cn) & !is.na(tab$battenberg_nMaj2_A) & !is.na(tab$battenberg_nMin2_A) & !is.na(tab$battenberg_frac2_A) & (tab$battenberg_nMaj1_A == tab$major_cn & tab$battenberg_nMin1_A == tab$minor_cn | tab$battenberg_nMaj2_A == tab$major_cn & tab$battenberg_nMin2_A == tab$minor_cn)
    ix <- c(1:nrow(tab), which(subclonalIndex))
    gr <- GRanges(tab$chromosome, IRanges(tab$start, tab$end), strand="*", clonal_frequency=purity, tab[-3:-1])[ix]
    if(any(subclonalIndex)){
        gr$clonal_frequency[which(subclonalIndex)] <- tab$battenberg_frac1_A[subclonalIndex] * purity
        gr$major_cn[which(subclonalIndex)] <- tab$battenberg_nMaj1_A[subclonalIndex]
        gr$minor_cn[which(subclonalIndex)] <- tab$battenberg_nMin1_A[subclonalIndex]
        gr$total_cn[which(subclonalIndex)] <- tab$battenberg_nMaj1_A[subclonalIndex] + tab$battenberg_nMin1_A[subclonalIndex]
        gr$clonal_frequency[-(1:nrow(tab))] <- tab$battenberg_frac2_A[subclonalIndex] * purity
        gr$total_cn[-(1:nrow(tab))] <- tab$battenberg_nMaj2_A[subclonalIndex] + tab$battenberg_nMin2_A[subclonalIndex]
        gr$major_cn[-(1:nrow(tab))] <- tab$battenberg_nMaj2_A[subclonalIndex]
        gr$minor_cn[-(1:nrow(tab))] <- tab$battenberg_nMin2_A[subclonalIndex]
    }
    seqlevels(gr) <- c(1:22, "X","Y")
    sort(gr)
}

refFile = "../ref/genome.fa.gz" #meta(header(v))["reference",]
refLengths <- scanFaIndex(file=refFile)
chrOffset <- cumsum(c(0,as.numeric(width(refLengths))))
names(chrOffset) <- c(seqlevels(refLengths), "NA")

averagePloidy <- function(bb) {
    c <- if(!is.null(bb$copy_number)) bb$copy_number else bb$total_cn
    sum(width(bb) * c * bb$clonal_frequency, na.rm=TRUE) / sum(width(bb) * bb$clonal_frequency, na.rm=TRUE)
}

averageEvenPloidy <- function(bb){
    sum(width(bb) * (!bb$major_cn %% 2 & !bb$minor_cn %% 2) * bb$clonal_frequency, na.rm=TRUE) / sum(width(bb) * bb$clonal_frequency, na.rm=TRUE)
}

getTumorCounts <- function(vcf){
    sapply(grep("(F|R).Z", names(geno(vcf)), value=TRUE), function(i) geno(vcf)[[i]][,"TUMOUR"])
}

getTumorDepth <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count + info(vcf)$t_ref_count
    }else{ ## older data
        if("FAZ" %in% rownames(geno(header(vcf)))){
            rowSums(getTumorCounts(vcf))
        }else{
            geno(vcf)$DEP[,2]
        }
    }
}

getAltCount <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count
    }else{ ## older formats
        if("FAZ" %in% rownames(geno(header(vcf)))){ ## ie subs
            c <- getTumorCounts(vcf)
            t <- c[,1:4] + c[,5:8]
            colnames(t) <- substring(colnames(t),2,2)
            a <- as.character(unlist(alt(vcf)))
            a[!a%in%c('A','T','C','G')] <- NA
            sapply(seq_along(a), function(i) if(is.na(a[i])) NA else t[i, a[i]])
        }
        else{ ## ie indel
            #(geno(vcf)$PP + geno(vcf)$NP + geno(vcf)$PB + geno(vcf)$NB)[,"TUMOUR"]
            geno(vcf)$MTR[,2]
        }
    }
}



mergeClusters <- function(clusters, deltaFreq=0.05){
    if(nrow(clusters) <= 1) return(clusters)
    h <- hclust(dist(clusters$proportion), members=clusters$n_ssms)
    ct <- cutree(h, h=deltaFreq)
    cp <- as.matrix(cophenetic(h))
    Reduce("rbind",lapply(unique(ct), function(i) {
                        n_ssms <- sum(clusters$n_ssms[ct==i])
                        w <- max(cp[ct==i,ct==i])
                        data.frame(new.cluster=i, n_ssms=n_ssms, proportion=sum(clusters$proportion[ct==i]*clusters$n_ssms[ct==i])/n_ssms, width=w)
                    }
    ))
}


removeSuperclones <- function(clusters, min.frac=0.1, delta.prop=0.1) {
    m <- which(clusters$proportion == max(clusters$proportion[clusters$n_ssms >= 0.1 * sum(clusters$n_ssms)]))
    w <- clusters$proportion >= clusters$proportion[m] - delta.prop
    if(sum(w)>1){
        cl <- as.data.frame(rbind(if(any(!w)) clusters[!w,,drop=FALSE], if(any(w)) colSums(clusters[w,,drop=FALSE]*(clusters[w,"n_ssms"]/sum(clusters[w,"n_ssms"])))))
        cl[nrow(cl),"n_ssms"] <- sum(clusters[w,"n_ssms"])
        clusters <- cl
    }
    return(clusters)
}

clustersFromBB <- function(bb){
    w <- bb$clonal_frequency == max(bb$clonal_frequency, na.rm=TRUE) | bb$clonal_frequency < 0.5 * max(bb$clonal_frequency, na.rm=TRUE)
    t <- table(bb$clonal_frequency[w])
    cl <- data.frame(cluster=seq_along(t), n_ssms=as.numeric(t), proportion=as.numeric(names(t)))
    mergeClusters(cl, deltaFreq=0.2)
}



mergeClustersByMutreadDiff = function(clusters, purity, ploidy, vcf_snv, min_read_diff) {
    calc_exp_mutreads_ccf = function(ccf, purity, ploidy, mean_depth) {
        return(ccf / (purity*ploidy + (1-purity)*2) * mean_depth)
    }
    clusters_new = clusters
    exp_reads = sapply(clusters$ccf, calc_exp_mutreads_ccf, purity=purity, ploidy=ploidy, mean_depth=mean(getTumorDepth(vcf_snv), na.rm=T))
    ccf_diff = exp_reads[1:(length(exp_reads)-1)] - exp_reads[2:length(exp_reads)]
    
    
    if (any(ccf_diff < min_read_diff)) {
        
        # Iteratively merge a pair of clusters untill no more pairs within distance can be found
        merged = T
        while(merged) {
            merged = F
            
            exp_reads = sapply(clusters_new$ccf, calc_exp_mutreads_ccf, purity=purity, ploidy=ploidy, mean_depth=mean(getTumorDepth(vcf_snv), na.rm=T))
            ccf_diff = exp_reads[1:(length(exp_reads)-1)] - exp_reads[2:length(exp_reads)]
            to_merge = which(ccf_diff < min_read_diff)
            
            if (length(to_merge)==0) {
                merged = F
                break
            } else {
                i = to_merge[1]
                clusters_new$ccf[i] = sum(clusters_new$ccf[c(i, i+1)]*clusters_new$n_ssms[c(i, i+1)]) / sum(clusters_new$n_ssms[c(i, i+1)])
                clusters_new$n_ssms[i] = sum(clusters_new$n_ssms[c(i, i+1)])
                clusters_new = clusters_new[-(i+1),]
                merged = T
            }
            
            if (nrow(clusters_new)==1) {
                merged = F
                break
            }
        }
    }
    clusters_new$proportion = clusters_new$ccf * purity
    
    # sorting and renumbering clusters
    clusters_new = clusters_new[with(clusters_new, order(proportion, decreasing=T)),]
    clusters_new$cluster = 1:nrow(clusters_new)
    return(clusters_new)
}





probGenotype <- function(vcf){
    dg <- factor(paste(unlist(info(vcf)$DG)), levels=c("NA",as.character(CANCERGENES)))
    P <- pGainToTime(vcf)
    G <- matrix(0, ncol=5, nrow=nlevels(dg), dimnames=list(levels(dg), c(colnames(P),"NA")))
    t <- table(dg)
    for(g in names(t[t>0]))
        G[g,] <- c(colSums(P[dg==g,,drop=FALSE],na.rm=TRUE), "NA"=sum(is.na(P[dg==g,1])))
    return(G)
}

probGenotypeTail <- function(vcf){
    dg <- factor(paste(unlist(info(vcf)$DG)), levels=c("NA",as.character(CANCERGENES)))
    P <- info(vcf)$pMutCNTail
    G <- rep(NA, nlevels(dg))
    names(G) <- levels(dg)
    t <- table(dg)
    for(g in names(t[t>0]))
        G[g] <- mean(P[dg==g,drop=FALSE],na.rm=TRUE)
    return(G)
}

getGenotype <- function(vcf, reclassify='missing', ...){
    w <- c(TRUE,diff(start(vcf)) != 1)
    cls <- classifyMutations(vcf, reclassify=reclassify)
    t <- info(vcf)$TCN
    if(is.null(t))
        t <- info(vcf)$MinCN + info(vcf)$MajCN
    hom <- factor(info(vcf)$MutCN==t, levels=c(TRUE,FALSE))
    dg <- factor(unlist(info(vcf)$DG), levels=as.character(CANCERGENES))
    table(gene=dg[w], class=cls[w], homozygous=hom[w], ...)
}

tryExceptNull <- function(x) if(class(x)=="try-error") GRanges() else x

loadVcf <- function(ID){
    file <- dir(vcfPath, pattern=paste0(ID, ".+somatic.snv_mnv.TNC.vcf.bgz$"), full.names=TRUE)
    pos <- loadPositions(ID)
    vcf <- readVcf(file, genome="GRCh37") #, param=ScanVcfParam(which=pos))
    f <- findOverlaps(pos, vcf, select="first")
    vcf <- vcf[na.omit(f)]
    vcf <- addDriver(vcf, CANCERGENES)
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="Numeric",Description="DP cluster", row.names="DPC"))
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="Numeric",Description="DP cluster probability", row.names="DPP"))
    info(vcf)$DPC <- pos$cluster[!is.na(f)]
    info(vcf)$DPP <- pos$likelihood[!is.na(f)]  
    vcf
}

isDeamination <- function(vcf) grepl("(A.CG)|(T..CG)", paste(as.character(unlist(alt(vcf))),vcf@info$TNC))
isDeaminationNoUV <-  function(vcf) grepl("(A.CG[C,T])|(T.[A,G]CG)", paste(as.character(unlist(alt(vcf))),vcf@info$TNC))


testDriver <- function(vcf) sapply(info(vcf)$VC, function(x) if(length(x) ==0) FALSE  else any(x %in% c('nonsense','missense','ess_splice','frameshift','inframe','cds_distrupted')))

addDriver <- function(vcf, mutsigDrivers){
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Driver gene", row.names="DG"))
    if(nrow(vcf)==0){
        info(vcf)$DG <- CharacterList()
        return(vcf)
    }
    
    r <- paste(paste0("^",mutsigDrivers,"(?=\\|)"), collapse="|")
    rowIdx <- grepl(r, info(vcf)$VD, perl=TRUE) & testDriver(vcf)
    g <- sapply(info(vcf)$VD, function(x) sub("\\|.+","", x))
    d <- ifelse(rowIdx,g,character(0))
    #d[is.na(d)] <- character(0)
    info(vcf)$DG <- as(d,"CharacterList")
    vcf
}

loadAssignment <- function(ID){
    file <- paste0(dpPath,"/",ID,"_DPoutput_1250iters_250burnin/",ID,"_DP_and_cluster_info.txt")
    read.table(file, header=TRUE, sep="\t")
}

addAssignment <- function(vcf, ID){
    a <- loadAssignment(ID)
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=ncol(a),Type="Numeric",Description="DP probability", row.names="DPP"))
    info(vcf)$DPP <- as.matrix(a)
    vcf
}

loadPositions <- function(ID){
    file <- gzfile(paste0(dpPath,"/",ID,"_mutation_assignments.txt.gz"))
    tmp <- read.table(file, header=TRUE, sep="\t")
    #GRanges(tmp$chr, IRanges(tmp$start+1, tmp$end), cluster=tmp$cluster, likelihood=tmp$likelihood)
    GRanges(tmp$chr, IRanges(tmp$pos, width=1), cluster=tmp$cluster)
}

tncToPyrimidine <- function(vcf){
    a <- unlist(alt(vcf))
    r <- ref(vcf)
    tnc <- DNAStringSet(info(vcf)$TNC)
    rc <- grepl("A|G", r)
    tnc[rc] <- reverseComplement(tnc[rc])
    a[rc] <- reverseComplement(a[rc])
    t <- paste0(substr(tnc,1,1), "[",substr(tnc,2,2), ">",a, "]", substr(tnc,3,3))
    n <- c("A","C","G","T")
    f <- paste0(rep(n, each=4), "[", rep(c("C","T"), each=96/2), ">", c(rep(c("A","G","T"), each=48/3), rep(c("A","C","G"), each=48/3)), "]", n)
    factor(t, levels=f)
} 


applyPigeonHole <- function(ID){
    c <- loadClusters(ID)
    p <- purityPloidy[ID,"purity"]
    mcf <- c$proportion#*p
    l <- sapply(1:length(mcf), function(i) mcf[i] > pmax(0,1-mcf))
    w <- which(l & upper.tri(l), arr.ind=TRUE)
    cbind(c$cluster[w[,1]], c$cluster[w[,2]])
}

reduceToCoverRelations <- function(rel){
    if(nrow(rel) ==0) return(rel)
    n <- max(rel)
    P <- matrix(FALSE,n,n)
    for(i in 1:nrow(rel))
        P[rel[i,1],rel[i,2]] <- TRUE
    for(i in 1:n){
        q <- list()
        visit <- logical(n)
        for(j in 1:n)
            if(P[i,j])
                q <- c(q,j)
        while(length(q)>0){
            j <- q[[1]]
            q[[1]] <- NULL
            for(k in 1:n){
                if(P[j,k] & !visit[k]){
                    visit[k] <- TRUE
                    q <- c(q,k)
                    if(P[i,k])
                        P[i,k] <- FALSE
                    if(P[k,i])
                        stop("Error.")
                    
                }
            }
        }
    }
    which(P, arr.ind=TRUE)
}

cnWeights <- function(vcf){
    t <- if(is.null(info(vcf)$TCN)) (info(vcf)$MajCN + info(vcf)$MinCN) else info(vcf)$TCN
    info(vcf)$MutCN / t
}

branchLengths <- function(vcf, type=c("all","deamination")){
    type <- match.arg(type)
    if(type=="deamination")
        w <- isDeamination(vcf)
    else
        w <- rep(TRUE, nrow(vcf))
    cnw <- cnWeights(vcf)
    u <- allClusters[[meta(header(vcf))$META["ID",1]]]$cluster
    b <- sapply(u, function(c) sum(2*cnw * (info(vcf)$DPC==c & w), na.rm=TRUE))
    #if(length(b)==0) b <- rep(0, length(u))
    names(b) <- u
    return(b)
}

avgWeights <- function(vcf, type=c("all","deamination")){
    type <- match.arg(type)
    if(type=="deamination")
        w <- isDeamination(vcf)
    else
        w <- rep(TRUE, nrow(vcf))
    cnw <- cnWeights(vcf)
    mean(2*cnw[w], na.rm=TRUE)
}

predictRealTime <- function(x, signatures=snmf$snmfFit$P[-1,]){
    snmf$snmfFit$P[1,1] / snmf$weight * snmf$nmSolve(x, signatures, maxIter=100)[1,]
}

#' ### Compute graphs (posets)
toGraph <- function(edgelist, branch.length, edge.labels, node.labels=1:max(edgelist)){
    g <- graph.edgelist(edgelist)
    E(g)$weight <- branch.length
    E(g)$name <- edge.labels
    V(g)$name <- node.labels
    return(g)   
}

na.rm <- function(x) x[!is.na(x)]

plotPoset <- function(g){
    c <- colorRampPalette(brewer.pal(9, "Spectral"))(10)
    plot(g, layout=layout.reingold.tilford(g), edge.label=E(g)$name, vertex.size = 25*pmin(1,V(g)$size), edge.width=E(g)$weight/100)
}

#' Distance in poset        
posetDist <- function(g) {
    e <- get.edgelist(g)
    w <-  c(0,E(g)$weight)
    names(w) <- c("Germline", e[,2])
    d <- shortest.paths(g, mode='out')
    d <- d - rep(w[colnames(d)], each=length(w))/2
    diag(d) <- NA
    d
}

getMutationCluster <- function(allMutations, vcf){
    m <- match(allMutations, unlist(info(vcf)$DG))
    info(vcf)$DPC[m]
}

distAsRange <- function(g){
    e <- get.edgelist(g)
    w <-  c(0,E(g)$weight)
    names(w) <- c("Germline", e[,2])
    d <- shortest.paths(g, mode='out')
    y <- shift(IRanges(-w[colnames(d)],0), d["Germline", ])
    names(y) <- paste0(colnames(d), ", genes=",E(g)$name[match(colnames(d), e[,2])])
    y
}


nmSolve <- function(D, P, maxIter = 500, tol=1e-3) {
    n <- nrow(D)
    m <- ncol(D)
    s <- ncol(P)
    tP <- t(P)
    rP <- rep(colSums(P), m)
    D <- as.matrix(D)
    E1 <- E2 <- matrix(runif(s * m, 1e-3, 1), ncol = m)
    err <- 2*tol
    
    iter <- 1
    while (iter < maxIter & err > tol) {
        E1 <- E2
        E2 <- E1 * (tP %*% (D/(P %*% (E1 + .Machine$double.eps))))/rP
        iter <- iter + 1
        err <- mean(abs(E2 - E1)/(E1+.Machine$double.eps), na.rm=TRUE)
        if(iter %% 100 == 0) cat(round(-log10(err)))
    }
    cat("\n")
    if(iter == maxIter) warning(paste("No convergence after",iter, "iterations."))
    E2
}

wnmSolve <- function(D, P, weights =  rep(0, ncol(P)), maxIter = 500, tol=1e-3) {
    D <- as.matrix(D)
    D <- rbind(D, matrix(weights, ncol=ncol(D), nrow=ncol(P)))
    P <- rbind(P, diag(rep(1,ncol(P))))
    n <- nrow(D)
    m <- ncol(D)
    s <- ncol(P)
    tP <- t(P)
    rP <- rep(colSums(P), m)
    E1 <- E2 <- matrix(runif(s * m, 1e-3, 1), ncol = m)
    err <- 2*tol
    
    iter <- 1
    while (iter < maxIter & err > tol) {
        E1 <- E2
        E2 <- E1 * (tP %*% (D/(P %*% (E1 + .Machine$double.eps))))/rP
        iter <- iter + 1
        err <- mean(abs(E2 - E1)/(E1+.Machine$double.eps), na.rm=TRUE)
        if(iter %% 100 == 0) cat(round(-log10(err)))
    }
    cat("\n")
    if(iter == maxIter) warning(paste("No convergence after",iter, "iterations."))
    E2
}



wgdTest <- function(vcf){
    id <- meta(header(vcf))$META["ID",1]
    bb <- allBB[[id]]
    ix <- which(bb$copy_number==4 & bb$minor_cn==2)
    v <- vcf[vcf %over% bb[ix]]
    #w <- sum(as.numeric(width(reduce(bb[ix]))))
    t <- table(info(v)$MutCN, info(v)$TCN, as.character(seqnames(v)), info(v)$DPC)
}

#' Power
power <- function(f,n, theta=6.3, err=1e-4) if(any(is.na(c(f,n,theta,err)))) NA else sum((log10(dbinom(0:n, n, 0:n/n) / dbinom(0:n,n,err)) > theta) * dbinom(0:n,n,f))

testIndel <- function(vcf) sapply(info(vcf)$VC, function(x) if(length(x) ==0) FALSE  else any(x %in% c('frameshift','inframe','ess_splice','SO:0001577:complex_change_in_transcript', 'SO:0001582:initiator_codon_change', 'splice_region')))

asum <- function(x, dim) apply(x, setdiff(seq_along(dim(x)), dim), sum)

#' official driver file
#d <- lapply(2:3, function(sheet) xlsx::read.xlsx2(file="../ref/TableS2_driver_point_mutations_annotation.xlsx", sheetIndex=sheet, colIndex=1:22, stringsAsFactors=FALSE, na.char="NaN"))
#colnames(d[[2]]) <- colnames(d[[1]])
#drivers <- do.call("rbind",d)
#drivers[drivers=="NaN" | drivers==""] <- NA
#drivers <- as.data.frame(sapply(drivers, function(x) if(all(!is.na(as.numeric(x[!is.na(x)])))) as.numeric(x) else x, simplify=FALSE))
finalData <- read.table("../final/ref/release_may2016.v1.4.tsv", header=TRUE, sep="\t")
#r <- gsub("-","",drivers$ref)
#i <- grepl("-",drivers$ref) | grepl("-",drivers$alt)  #drivers$mut_type=="indel" # need to fix indels
#r[i] <- paste0("N",r[i])
#a <- gsub("-","",drivers$alt)
#a[i] <- paste0("N",a[i])
#p <- drivers$pos
#p[i & !grepl("-", drivers$ref)] <- p[i & !grepl("-", drivers$ref)]-1
#m <- sapply(levels(drivers$sample), function(x) grep(x, finalData$sanger_variant_calling_file_name_prefix))
#finalDrivers <- VRanges(seqnames = drivers$chr, ranges=IRanges(p, width =  width(r)), ref=DNAStringSet(r), alt=DNAStringSet(a), sampleNames = finalData$icgc_donor_id[m[drivers$sample]])
#mcols(finalDrivers) <- cbind(sample=drivers$sample, samples=finalData$sanger_variant_calling_file_name_prefix[m[drivers$sample]], ID= drivers$gene_id, drivers[,8:22], mut_type=ifelse(i, "indel","snv"))
#save(finalDrivers, file="../ref/TableS2_driver_point_mutations_annotation.RData")
load(file="../ref/TableS2_driver_point_mutations_annotation.RData")
CANCERGENES <- levels(finalDrivers$ID)

matchDrivers <- function(vcf, finalDrivers) {
    ID <- meta(header(vcf))$META["ID",1]
    d <- finalDrivers[grep(ID, finalDrivers$samples)]
    g <- factor(rep(NA,nrow(vcf)), levels = levels(d$ID))
    if(length(d)==0)
        return(g)
    overlaps <- findOverlaps(vcf, d)
    g[queryHits(overlaps)] <- d$ID[subjectHits(overlaps)]
    return(g)
}

addFinalDriver <- function(vcf, finalDrivers){
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Driver mutation", row.names="DG"))
    info(vcf)$DG <- factor(rep(NA,nrow(vcf)), levels = levels(finalDrivers$ID))
    if(nrow(vcf)==0)
        return(vcf)
    g <- matchDrivers(vcf = vcf, finalDrivers = finalDrivers)
    info(vcf)$DG <- g
    return(vcf)
}


clinicalData <- read.table("../ref/pcawg_donor_clinical_August2016_v9.tsv", header=TRUE, sep="\t", comment="", quote="")

load("../ref/Sarcs_ages.RDa")
for(x in Sarcs_age)
    clinicalData$donor_age_at_diagnosis[match(as.character(x$icgc_donor_id), as.character(clinicalData$icgc_donor_id))] <- as.numeric(x$Age)
rm(Sarcs_age)
specimenData <- read.table("../ref/pcawg_specimen_histology_August2016_v9.tsv", header=TRUE, sep="\t", comment="", quote="")
specimenData$histology_abbreviation <- sub("CA$","Ca",specimenData$histology_abbreviation)

s <- strsplit(as.character(finalData$sanger_variant_calling_file_name_prefix),",")
sample2donor <- as.character(finalData$icgc_donor_id[unlist(sapply(seq_along(s), function(i) rep(i, length(s[[i]]))))])
names(sample2donor) <- unlist(s)

s <- unlist(strsplit(as.character(finalData$sanger_variant_calling_file_name_prefix),","))
sample2icgc <- unlist(strsplit(as.character(finalData$tumor_wgs_icgc_sample_id),",")) #as.character(finalData$tumor_wgs_icgc_sample_id[unlist(sapply(seq_along(s), function(i) rep(i, length(s[[i]]))))])
names(sample2icgc) <- s#unlist(s)


donor2type <- factor(specimenData$histology_abbreviation, levels=c(sort(unique(specimenData$histology_abbreviation))[-1], ""))
donor2type <- as.character(donor2type)
donor2type[donor2type=="Kidney-RCC" & grepl("clear cell", specimenData$histology_tier4)] <- "Kidney-CCRCC"
donor2type[donor2type=="Kidney-RCC" & grepl("papillary",specimenData$histology_tier4)] <- "Kidney-PapRCC"
donor2type <- factor(donor2type)
names(donor2type) <- specimenData$icgc_donor_id
levels(donor2type)[levels(donor2type)==""] <- "Other/NA"


t <- read.table("../ref/tumour_subtype_consolidation_map.tsv - Unique List of Tumour Types_August.tsv", sep='\t', header=TRUE, comment="")
c <- as.character(t$`Color..RGB.code.`)
names(c) <- sub("CA$","Ca",t$`Abbreviation`)
c <- c[c != ""  & !duplicated(names(c))]
tissueColors <- c(table(donor2type))*NA
tissueColors[names(c)] <- c
tissueColors["Lymph-CLL"] <- "#F4A35D"
tissueColors["Kidney-CCRCC"] <-  tissueColors["Kidney-RCC"]
tissueColors["Kidney-PapRCC"] <- "#E53E00"
tissueColors <- tissueColors[levels(donor2type)]

tissueBorder <- c("white","black")[names(tissueColors) %in% c("Lung-SCC","Lung-AdenoCa")+1]
names(tissueBorder) <- names(tissueColors)

tissueLines <- tissueColors
tissueLines[names(tissueColors) %in% c("Lung-SCC","Lung-AdenoCa")] <- "black"

tissueLty <- c(1,1)[names(tissueColors) %in% c("Lung-SCC","Lung-AdenoCa")+1]
names(tissueLty) <- names(tissueColors)
tissueLty["Lung-SCC"] <- 5
tissueLty["Lung-AdenoCa"] <- 4

tissueCex <- tissueLty
tissueCex[grep("Lung", names(tissueCex))] <- 0.8

averageHom <- function(bb){
    sum(width(bb) * (bb$minor_cn == 0) * bb$clonal_frequency, na.rm=TRUE) / sum(width(bb) * bb$clonal_frequency, na.rm=TRUE)
}

.classWgd <- function(ploidy, hom) 2.9 -2*hom <= ploidy

classWgd <- function(bb) .classWgd(averagePloidy(bb), averageHom(bb))

plotBB <- function(bb, ylim=c(0,max(max(bb$total_cn, na.rm=TRUE))), col=RColorBrewer::brewer.pal(4,"Set2"), type=c("lines","bars"), legend=TRUE, lty.grid=1, col.grid="grey", xaxt=TRUE, xlim=c(min(chrOffset[as.character(seqnames(bb))]+start(bb)),max(chrOffset[as.character(seqnames(bb))]+end(bb)))){
    type <- match.arg(type)
    s <- c(1:22, "X","Y")
    l <- as.numeric(width(refLengths[seqnames(refLengths) %in% s]))
    names(l) <- s
    plot(NA,NA, ylab="Copy number",xlab="",xlim=xlim, ylim=ylim, xaxt="n")
    c <- cumsum(l)
    axis(side=1, at=c(0,c), labels=rep('', length(l)+1))
    if(xaxt) mtext(side=1, at= cumsum(l) - l/2, text=names(l), line=1)
    #abline(v=c, lty=3)
    if(type=="lines"){
    x0 <- start(bb) + cumsum(l)[as.character(seqnames(bb))] - l[as.character(seqnames(bb))]
    x1 <- end(bb) + cumsum(l)[as.character(seqnames(bb))] - l[as.character(seqnames(bb))]
    lwd <- 5* bb$clonal_frequency / max(bb$clonal_frequency)
    segments(x0=x0, bb$major_cn ,x1, bb$major_cn, col=col[1], lwd=lwd)
    segments(x0=x0, bb$minor_cn -.125,x1, bb$minor_cn-.125, col=col[2], lwd=lwd)
    segments(x0=x0, bb$total_cn+.125,x1, bb$total_cn+.125, col=1, lwd=lwd)
#   cv <- coverage(bb)
#   cv <- cv[s[s%in%names(cv)]]
#   par(xpd=NA)
#   for(n in names(cv)){
#       cc <- cv[[n]]
#       segments(start(cc) + cumsum(l)[n] - l[n] ,-runValue(cc)/2,end(cc)+ cumsum(l)[n] - l[n], -runValue(cc)/2, col=4)
#   }
    }else{
        ub <- unique(bb)
        f <- findOverlaps(ub,bb)
        m <- t(model.matrix( ~ 0 + factor(queryHits(f))))
        ub$total_cn <- m %*% mg14::na.zero(bb$total_cn * bb$clonal_frequency) / max(bb$clonal_frequency)
        ub$major_cn <- m %*% mg14::na.zero(bb$major_cn * bb$clonal_frequency) / max(bb$clonal_frequency)
        ub$minor_cn <- m %*% mg14::na.zero(bb$minor_cn * bb$clonal_frequency) / max(bb$clonal_frequency)
        ub$clonal_frequency <- max(bb$clonal_frequency)
        x0 <- start(ub) + cumsum(l)[as.character(seqnames(ub))] - l[as.character(seqnames(ub))]
        x1 <- end(ub) + cumsum(l)[as.character(seqnames(ub))] - l[as.character(seqnames(ub))]
        rect(x0,0,x1, ub$major_cn, col=col[2], lwd=NA)
        rect(x0,ub$major_cn,x1, ub$total_cn, col=col[1], lwd=NA)
        abline(h = 1:floor(ylim[2]), lty=lty.grid, col=col.grid)
    }
    abline(v = chrOffset[1:25], lty=lty.grid, col=col.grid)
    if(xaxt) mtext(side=1, line=1, at=chrOffset[1:24] + diff(chrOffset[1:25])/2, text=names(chrOffset[1:24]))
    if(legend){
        if(type=="lines") legend("topleft", c("Total CN","Major CN","Minor CN"), col=c("black", col[1:2]), lty=1, lwd=2, bg='white')
        else legend("topleft", c("Major CN","Minor CN"), fill=col[1:2], bg='white')
    }
}

plotVcf <- function(vcf, bb, clusters, col = RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)], ID = meta(header(vcf))[[1]]["ID",1], IS_WGD=classWgd(bb), NO_CLUSTER=FALSE, title=TRUE, legend=TRUE, lty.grid=1, col.grid="grey", xaxt=TRUE, pch=16, pch.out=pch, cex=0.66, xlim=c(0,chrOffset["MT"])) {
    cls <- factor(paste(as.character(info(vcf)$CLS)), levels = c("clonal [early]","clonal [late]","clonal [NA]","subclonal" , "NA"))
    plot(NA,NA, xlab='', ylab="VAF", ylim=c(0,1), xlim=xlim, xaxt="n", cex=cex)
    if(title){
        title(main=paste0(ID,", ", donor2type[sample2donor[ID]], "\nploidy=",round(averagePloidy(bb),2), ", hom=",round(averageHom(bb),2), if(IS_WGD) ", WGD" else "", if(NO_CLUSTER) ", (No clusters available)" else(paste0(", clusters=(",paste(round(clusters$proportion, 2), collapse="; "),")"))), font.main=1, line=1, cex.main=1)
    } 
    abline(v = chrOffset[1:25], lty=lty.grid, col=col.grid)
    if(xaxt) mtext(side=1, line=1, at=chrOffset[1:24] + diff(chrOffset[1:25])/2, text=names(chrOffset[1:24]))
    for(i in which(!sapply(bb$timing_param, is.null))) {
                    s <- start(bb)[i]
                    e <- end(bb)[i]
                    x <- chrOffset[as.character(seqnames(bb)[i])]
                    y <- bb$timing_param[[i]][,"f"]
                    l <- bb$timing_param[[i]][,"pi.s"] * bb$timing_param[[i]][,"P.m.sX"]
                    l[is.na(l)] <- 0
                    if(any(is.na(c(s,e,x,y,l)))) next
                    segments(s+x,y,e+x,y, lwd=l*4+.1)
                    #text(x=(s+e)/2 +x, y=y, paste(signif(bb$timing_param[[i]][,"m"],2),signif(bb$timing_param[[i]][,"cfi"]/purityPloidy[meta(header(vv))["ID",1],"purity"],2), sep=":"), pos=3, cex=0.5)
                }
    points(start(vcf) + chrOffset[as.character(seqnames(vcf))], getAltCount(vcf)/getTumorDepth(vcf),col=col[cls],  pch=ifelse(info(vcf)$pMutCNTail < 0.025 | info(vcf)$pMutCNTail > 0.975, pch.out , pch),  cex=cex)                
    if(legend) legend("topleft", pch=19, col=col, legend=paste(as.numeric(table(cls)), levels(cls)), bg='white')
}

timeToBeta <- function(time){
    mu <- time[,1]
    #if(any(is.na(time))) return(c(NA,NA))
    mu <- pmax(1e-3, pmin(1 - 1e-3, mu))
    v <- (0.5 * (pmax(mu,time[,3])-pmin(mu,time[,2])))^2
    alpha <- mu * (mu * (1-mu) / v - 1)
    beta <- (1-mu) *  (mu * (1-mu) / v - 1)
    return(cbind(alpha, beta))
}

plotTiming <- function(bb, time=mcols(bb), col=paste0(RColorBrewer::brewer.pal(5,"Set2")[c(3:5)],"88"), legend=TRUE, col.grid='grey', lty.grid=1, xlim=c(0,chrOffset["MT"]), plot=2){
    plot(NA,NA, xlab='', ylab="Time [mutations]", ylim=c(0,1), xlim=xlim, xaxt="n")
    if(any(!is.na(bb$time)))
        tryCatch({
                    bb <- bb[!is.na(bb$time)]
                    s <- start(bb)
                    e <- end(bb)
                    x <- chrOffset[as.character(seqnames(bb))]
                    y <- time[,"time"]
                    rect(s+x,time[,"time.lo"],e+x,time[,"time.up"], border=NA, col=col[time[,"type"]], angle = ifelse(bb$time.star=="*" | is.na(bb$time.star),45,135), density=ifelse(bb$time.star == "***", -1, 72))
                    segments(s+x,y,e+x,y)
                    
                    if("time.2nd" %in% colnames(time)){ 
                        w <- !is.na(time[,"time.2nd"])
                        if(sum(w) != 0 & plot==2){
                            s <- start(bb)[w]
                            e <- end(bb)[w]
                            x <- chrOffset[as.character(seqnames(bb))][w]
                            y <- time[w,"time.2nd"]
                            rect(s+x,time[w,"time.2nd.lo"],e+x,time[w,"time.2nd.up"], border=NA, col=sub("88$","44",col)[as.numeric(time[w,"type"])], angle = ifelse(bb$time.star[w]=="*" | is.na(bb$time.star[w]),45,135), density=ifelse(bb$time.star[w] == "***", -1, 72))
                            segments(s+x,y,e+x,y)
                        }
                    }
                }, error=function(x) warning(x))
    abline(v = chrOffset[1:25], lty=lty.grid, col=col.grid)
    s <- c(1:22, "X","Y")
    l <- as.numeric(width(refLengths[seqnames(refLengths) %in% s]))
    names(l) <- s
    c <- cumsum(l)
    axis(side=1, at=c(0,c), labels=rep('', length(l)+1))
    mtext(side=1, line=1, at=chrOffset[1:24] + diff(chrOffset[1:25])/2, text=names(chrOffset[1:24]))
    if(legend) legend("topleft", levels(time[,"type"]), fill=col, bg="white")
}

source("../modules/MutationTime.R/MutationTime.R")

findMainCluster <- function(bb, min.dist=0.05){
    w <- which(bb$n.snv_mnv > 20 & !is.na(bb$time))
#   d <- dist(bb$time[w])
#   ci <- weighted.mean((bb$time.up - bb$time.lo)[w], width(bb)[w])
#   h <- hclust(d, method='average', members=bb$n.snv_mnv[w])
#   c <- cutree(h, h=ci)
#   ww <- c==which.max(table(c))
#   weighted.mean(bb$time[w][ww], 1/((bb$time.up - bb$time.lo + min.dist)[w][ww]), na.rm=TRUE)
    s <- seq(0,1,0.01)
    l2 <- pmin(bb$time.lo, bb$time - min.dist)[w]
    u2 <- pmax(bb$time.up, bb$time + min.dist)[w]
    l1 <- (l2 +  bb$time[w])/2
    u1 <- (u2+  bb$time[w])/2
    wd <- as.numeric(width(bb)[w])
    o <- sapply(s, function(i) sum(wd * ( (l2 <= i & u2 >=i) + (l1 <= i & u1 >= i))))
    s[which.max(o)]
}

fractionGenomeWgdCompatible <- function(bb, min.dist=0.05){
    m <- findMainCluster(bb)
    l <- pmin(bb$time.lo, bb$time - min.dist)
    u <- pmax(bb$time.up, bb$time + min.dist)
    w <- which(l <= m & u >= m)
    avgCi <- weighted.mean(bb$time.up- bb$time.lo, width(bb), na.rm=TRUE)
    sd.wgd <- sqrt(weighted.mean((bb$time[w] - m)^2, width(bb)[w], na.rm=TRUE))
    sd.all <- sqrt(weighted.mean((bb$time - m)^2, width(bb), na.rm=TRUE))
    c(nt.wgd=sum(as.numeric(width(bb))[w]), nt.total=sum(as.numeric(width(bb))[!is.na(bb$time)]), time.wgd=m, n.wgd=length(w), n.all = sum(!is.na(bb$time)), chr.wgd = length(unique(seqnames(bb)[w])), chr.all = length(unique(seqnames(bb)[!is.na(bb$time)])), sd.wgd=sd.wgd, avg.ci=avgCi, sd.all=sd.all) 
}

flattenBB <- function(bb){
    u <- unique(bb)
    d <- duplicated(bb)
    mcols(u) <- mcols(u)[1:7]
    u$total_cn_2 <- u$major_cn_2 <- u$minor_cn_2 <- as.integer(NA)
    u$clonal_frequency_2 <- as.numeric(0)
    if(any(d)){
        s <- bb[d]
        f <- findOverlaps(s, u, select='first')
        mcols(u)[f, c("total_cn_2","major_cn_2","minor_cn_2","clonal_frequency_2")] <- mcols(s)[, c("total_cn","major_cn","minor_cn","clonal_frequency")]
    }
    u
}

reduceBB <- function(bb){
    b <- split(bb, do.call("paste", mcols(bb)[c("clonal_frequency","major_cn","minor_cn")]))
    r <- reduce(b)
    s <- sort(unlist(r))
    d <- DataFrame(t(sapply(strsplit(names(s), " "), as.numeric)))
    names(d) <- c("clonal_frequency","major_cn","minor_cn")#names(mcols(bb))
    mcols(s) <- d
    names(s) <- NULL
    u <- unique(bb)
    f <- findOverlaps(s, u)
    t <- table(subjectHits(f), queryHits(f))
    s$n.snv_mnv <- u$n.snv_mnv %*% as.matrix(t)
    s$total_cn <- s$major_cn + s$minor_cn
    s$timing_param <- vector(mode="list", length=length(s))
    s$timing_param[subjectHits(f)] <- u$timing_param[queryHits(f)]
    return(s)
}

stackTime <- function(bb, time="time", t=seq(0,1,0.01)){
    u <- unique(bb)
    cols <- paste0(time,c("",".up",".lo"))
    w <- as.numeric(width(u))
    u <- mcols(u)
    f <- function(x) pmin(pmax(x,0.01),0.99)
    ut <- f((0.5*5+u[,cols[1]] * u$n.snv_mnv)/(5+u$n.snv_mnv))
    uu <- f(u[,cols[2]])
    ul <- f(u[,cols[3]])
    diff(car::logit(f(t))) * rowSums(sapply(which(!is.na(ut)), function(i) w[i]*dnorm(car::logit(t[-1] - diff(t)/2), mean=car::logit(ut[i]), sd= (car::logit(uu[i]) - car::logit(ul[i]) + 0.05)/4)))#(t <= u$time.up[i] & t >= u$time.lo[i])))
    #rowSums(sapply(which(!is.na(ut)), function(i) w[i]*(t <= u$time.up[i] & t >= u$time.lo[i])))
}

betaFromCi <- function(x, weight.mode=5){
    if(any(is.na(x))) return(rep(NA,2))
    f <- function(par,x) {
        beta <- exp(par)
        sum((qbeta(c(0.025,0.975), beta[1], beta[2])-x[-1])^2)+weight.mode*((beta[1]-1)/(beta[1]+beta[2]-2)-x[1])^2
    }
    tryCatch(exp(optim(c(0.1,0.1), fn=f,x=x)$par), error=c(1,1))
}

histBeta <- function(bb, time="time",n.min=10, s=seq(0.005,0.995,0.01)){
    s <- pmax(0.001,pmin(0.999, s))
    cols <- paste0(time,c("",".lo",".up"))
    w <- which(bb$n.snv_mnv > n.min & !is.na(mcols(bb)[cols[1]]) & !duplicated(bb))
    if(length(w)==0) return(rep(NA, length(s)))
    d <- apply(as.matrix(mcols(bb)[w,c(cols, "n.snv_mnv")]), 1, function(x){
                beta <- betaFromCi(x[1:3])
                beta <- (beta * x[4] + 5*c(1,1))/(x[4]+5) # "posterior" with prior B(1,1)
                dbeta(s,beta[1],beta[2])
            })
    wd <- as.numeric(width(bb)[w])
    o <- d %*% wd
}



plotSample <- function(w, vcf = finalSnv[[w]],  bb = finalBB[[w]], sv=finalSv[[w]], title=w, regions=refLengths[1:24], ylim.bb=c(0,5), layout.height=c(4,1.2,3.5), y1=ylim.bb[2]-1) {
    p <- par()
    layout(matrix(1:3, ncol=1), height=layout.height)
    par(mar=c(0.5,3,0.5,0.5), mgp=c(2,0.25,0), bty="L", las=2, tcl=-0.25, cex=1)
    xlim=c(min(chrOffset[as.character(seqnames(regions))]+start(regions)),max(chrOffset[as.character(seqnames(regions))]+end(regions)))
    bbb <- bb[bb %over% regions]
    plotVcf(vcf[vcf %over% regions], bbb, finalClusters[[w]], title=FALSE, legend=FALSE, col.grid='white',  xaxt=FALSE, cex=0.33, xlim=xlim)
    mtext(line=-1, side=3, title, las=1)
    plotBB(bbb, ylim=ylim.bb, legend=FALSE, type='bar', col.grid='white', col=c("lightgrey", "darkgrey"), xaxt=FALSE, xlim=xlim)
    tryCatch({
        par(xpd=NA)
        plotSv(sv, y1=y1, regions=regions, add=TRUE)
        par(xpd=FALSE)
    }, error=function(x) warning(x))
    par(mar=c(3,3,0.5,0.5))
    plotTiming(bbb, xlim=xlim, legend=FALSE, col.grid=NA)
    if(length(regions) == 1)
        axis(side=1, at=pretty(c(start(regions), end(regions)))+chrOffset[as.character(seqnames(regions))], labels=sitools::f2si(pretty(c(start(regions), end(regions)))))
    if(any(!is.na(bb$time))){
        y0 <- seq(0.005,0.995,0.01)
        s <- histBeta(bb)
        g <- colorRampPalette(RColorBrewer::brewer.pal(4,"Set1")[c(3,2,4)])(100)
        segments(x0=chrOffset["MT"] ,y0=y0,x1=chrOffset["MT"] + s/max(s) * 1e8, col=g, lend=3)
        getMode <- function(s){
            if(all(is.na(s))) return(NA)
            w <- which.max(s)
            if(w %in% c(1, length(s))){
                m <- which(c(0,diff(s))>0 & c(diff(s),0)<0)
                if(length(m)==0) return(w)
                m <- m[which.max(s[m])]
                return(if(s[w] > 2*s[m]) w else m) 
            } else return(w)
        }
        abline(h=y0[getMode(s)], lty=5)
        if("time.2nd" %in% colnames(mcols(bb))) if(any(!is.na(bb$time.2nd))){
        s2 <- histBeta(bb, time="time.2nd")
        segments(x0=chrOffset["MT"] + s/max(s) * 1e8 ,y0=y0,x1=chrOffset["MT"] + s/max(s) * 1e8 + s2/max(s) * 1e8, col=paste0(g,"44"), lend=3)
        abline(h=y0[getMode(s2)], lty=3)
        
    }
    }
    #print(w)
    par(p[setdiff(names(p), c("cin","cra","csi","cxy","din","page"))])
}

plotSv <- function(sv, y0=0,y1=y0, h=1, col=paste0(RColorBrewer::brewer.pal(5,"Set1"),"44"), regions=refLengths[1:24], add=FALSE){
    if(add==FALSE){
        s <- c(1:22, "X","Y")
        l <- as.numeric(width(refLengths[seqnames(refLengths) %in% s]))
        names(l) <- s
        plot(NA,NA, ylab="Copy number",xlab="",xlim=xlim, ylim=ylim, xaxt="n")
        c <- cumsum(l)
        axis(side=1, at=c(0,c), labels=rep('', length(l)+1))
        if(length(regions) == 1)
            axis(side=1, at=pretty(c(start(regions), end(regions)))+chrOffset[as.character(seqnames(regions))], labels=sitools::f2si(pretty(c(start(regions), end(regions)))))
        if(xaxt) mtext(side=1, at= cumsum(l) - l/2, text=names(l), line=1)
    }
    #r <- rowRanges(sv)
    #a <- unlist(alt(sv))
    vs <- GRanges(info(sv)$MATECHROM, IRanges(info(sv)$MATEPOS, width=1))
    l <- 20
    x0 <- seq(0,1,l=l) 
    y2 <- x0*(1-x0)*4*h
    cls <- factor(as.character(info(sv)$SVCLASS), levels=c("DEL", "DUP", "h2hINV","t2tINV","TRA"))
    w <- which(sv %over% regions | vs %over% regions)
    for(i in w)
        try({
                    x <- seq(start(sv)[i] + chrOffset[as.character(seqnames(sv)[i])], start(vs)[i] + chrOffset[as.character(seqnames(vs)[i])], length.out=l)
                    x <- c(x[1], x, x[length(x)])
                    y <- y1 + y2 * if(grepl("INV", cls[i])) -1 else 1
                    y <- c(y0, y , y0)
                    lines(x, y, col=col[cls[i]])
                    #segments(x0=c(x[1], x[l]), x1=c(x[1],x[l]), y0=y0, y1=y1, col=col[cls[i]])
    })
}

t <- read.table("../ref/release_may2016.v1.1.TiN__donor.TiNsorted.20Jul2016.tsv", header=TRUE, sep="\t")
TiN <- t$TiN_donor
names(TiN) <- t$icgc_donor_id

w <- read.table("../final/structure_weme_released_consensus_merged.txt", header=TRUE)
wemeClustersMerged <- split(w[,1:4], w$sample)

cosineDist <- function(x,y){
    t(x)%*%y/(sqrt(colSums(x^2)  %*% t(colSums(y^2))) )
}

14.3 VCF-annotate.R

# TODO: Add comment
# 
# Author: mg14
###############################################################################

set.seed(42)

args <- commandArgs(trailingOnly = TRUE)

source("PCAWG-functions.R")

vcfFileIn <- args[1]
vcfFileOut <- args[2]

print(vcfFileIn)
print(vcfFileOut)

library(VariantAnnotation)
library(Matrix)

s <- strsplit(vcfFileIn,"/")[[1]]
ID <- sub("\\..+", "", s[length(s)])


print(ID)

#' ## CLUSTERS
# Load clusters
clusters <- consensusClustersToOld(loadConsensusClusters((ID))) # consensus clusters
clusters$proportion <- wccClusters[[ID]]$proportion # WCC adjusted CP
clusters$n_ssms <- wemeClustersMerged[[ID]]$n_ssms # WEME prevalence to fix consensus bug
purity <- purityPloidy[ID,'purity']

#' ## COPYNUMBER
bb <- loadConsensusCNA(ID, purity=purityPloidy[ID, 'purity'])
IS_WGD <- classWgd(bb)

#' ## VCF 
#' Load vcf
vcf <- readVcf(vcfFileIn, genome="GRCh37") #, param=ScanVcfParam(which=pos))

# Add ID & gender
meta(header(vcf))$META <- rbind(meta(header(vcf))$META, DataFrame(Value=c(ID, as.character(allGender[ID, "pred_gender"])), row.names=c("ID", "gender")))

# Add driver genes
vcf <- addFinalDriver(vcf, finalDrivers)

# Add TNC
if(!"TNC" %in% rownames(info(header(vcf)))){
    tnc=scanFa(file=refFile, resize(granges(vcf), 3,fix="center"))
    i = info(header(vcf))
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Trinucleotide context", row.names="TNC"))
    info(vcf)$TNC <- as.character(tnc)
}

#' Add mutation copy numbers
# vcf <-  addMutCn(vcf, bb, clusters)
i = info(header(vcf))
info(header(vcf)) <- rbind(i,mcnHeader())
L <- computeMutCn(vcf, bb, clusters=clusters, purity=purity, xmin=3, gender=as.character(allGender[ID, "pred_gender"]), isWgd=IS_WGD, n.boot=500)
info(vcf) <- cbind(info(vcf), L$D)
bb$timing_param <- L$P 

#' Classify mutations
cls <- classifyMutations(vcf, reclassify='all')
info(vcf)$CLS <- cls
info(header(vcf)) <- rbind(info(header(vcf)), DataFrame(Number="1",Type="String",Description="Mutation classification: {clonal [early/late/NA], subclonal}", row.names="CLS"))

#' Timing
bb$n.snv_mnv <- countOverlaps(bb, vcf)
t <- bbToTime(bb)   
mcols(bb) <- DataFrame(mcols(bb), t)

#' Drivers
info(vcf)$DG <- matchDrivers(vcf, finalDrivers)

#' Save output
writeVcf(vcf, file=vcfFileOut)
bgzip(vcfFileOut, overwrite=TRUE)
unlink(vcfFileOut)
save(vcf, file=paste0(vcfFileOut,".RData"))


#' ## INDEL
vcfIndelFileIn <- sub("20160830","20161006",gsub("snv_mnv","indel", vcfFileIn))
vcfIndelFileOut <-  sub("20160830","20161006",gsub("snv_mnv","indel", vcfFileOut))
#' Load vcf
vcfIndel <- readVcf(vcfIndelFileIn, genome="GRCh37") #, param=ScanVcfParam(which=pos))
#' Add ID & gender
meta(header(vcfIndel))$META <- rbind(meta(header(vcfIndel))$META, DataFrame(Value=c(ID, as.character(allGender[ID, "pred_gender"])), row.names=c("ID", "gender")))
#' Add driver genes
vcfIndel <- addFinalDriver(vcfIndel, finalDrivers)
#' Add mutation copy numbers
i = info(header(vcfIndel))
info(header(vcfIndel)) <- rbind(i,mcnHeader())
L <- computeMutCn(vcfIndel, bb, clusters=clusters, purity=purity, xmin=3, gender=as.character(allGender[ID, "pred_gender"]), isWgd=IS_WGD)
info(vcfIndel) <- cbind(info(vcfIndel), L$D)
#' Classify mutation
clsIndel <- classifyMutations(vcfIndel, reclassify='all')
info(vcfIndel)$CLS <- clsIndel
info(header(vcfIndel)) <- rbind(info(header(vcfIndel)), DataFrame(Number="1",Type="String",Description="Mutation classification: {clonal [early/late/NA], subclonal}", row.names="CLS"))
#'Drivers
info(vcfIndel)$DG <- matchDrivers(vcfIndel, finalDrivers)


#' Save
writeVcf(vcfIndel, file=vcfIndelFileOut)
bgzip(vcfIndelFileOut, overwrite=TRUE)
unlink(vcfIndelFileOut)
save(vcfIndel, file=paste0(vcfIndelFileOut,".RData"))

#' Save BB
bb$n.indel <- countOverlaps(bb, vcfIndel)
seqlevels(bb) <- c(1:22, "X","Y")
bb <- sort(bb)
save(bb, file=sub("snv_mnv","cn",sub(".vcf$",".bb_granges.RData",vcfFileOut)))

#' Save clusters & purity
save(clusters, purity, file=sub("snv_mnv","clusters",sub(".vcf$",".clusters_purity.RData",vcfFileOut)))

#' ## PLOT
pdf(file=sub("snv_mnv","other",sub(".vcf$",".pdf",vcfFileOut)), 12,18)
par(mar=c(1,3,3,1), bty="L", mgp=c(2,.5,0), mfrow=c(4,1),cex=1, las=2)
j <- 1
for(v in c('vcf','vcfIndel')){
    vv <- get(v)
    col <- RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)]
    plotVcf(vcf = vv, bb = bb, clusters = clusters, col = col, ID = ID,  IS_WGD = IS_WGD, NO_CLUSTER = FALSE, title=j==1)
    j <- j+1
}
plotBB(bb, ylim=c(0,10))
try(plotTiming(bb))
dev.off()
#plot(start(vcf) + w[as.character(seqnames(vcf))], qnorm(info(vcf)$pMutCNTail), col=col[cls], xlab='Position', ylab="pTail", pch=16)